跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Python 异常处理风格
未分類
14 11 月 2020

Python 异常处理风格

Python 异常处理风格

資深大佬 : bbxiong 3

selenium api 基本全都会抛异常

比如

if driver.find_element_by_class_name(“general-error”): print(“登录错误”)

必须要写成如下 try: if driver.find_element_by_class_name(“general-error”): print(“登录错误”) except: pass

所有常用 api 都会抛出异常,每个 find_element_by_xxx 都必须放在 try except 封装成函数,显得代码臃肿不堪…

是不是我的风格有问题,请教下大家都怎么处理这种情况的.

大佬有話說 (7)

  • 資深大佬 : imn1

    这种情况我选择换个写法,例如其他模块

    实际上我都没用过 selenium api,都不知道会抛出异常,我是获取 content 然后用其他 parser 模块处理的

    如果不可避免非要用某个模块,它又容易抛出异常,我会写个类继承过来,或者闭包,把异常集中处理

  • 資深大佬 : happinessnch

    异常处理,和业务逻辑没有关系,咋一看好像很臃肿,好多地方要 try catch,
    实际上异常处理多了慢慢也就习惯了,根据不同异常做一些定制化的处理,
    绝大多数异常是不应该直接 pass 的,但是实际开发时,每个异常都处理确实有点过于苛求了。

  • 資深大佬 : no1xsyzy

    这个是设计问题,不过你这边似乎也可以更正交地抽象

    def finds(driver, **kwargs):
       try:
         return driver.find_element(…) # TODO: implement it
       except:
         return None

    这样的话你以后就可以
    if finds(driver, class_name=”loaderIcon”):
      …
    elif finds(driver, class_name=”ut-tab-bar”):
      …
    …

  • 資深大佬 : no1xsyzy

    @happinessnch BTW 如果逻辑上确实应不处理,我推荐 with contextlib.suppress
    如果暂时不作处理,我推荐 except: pass # TODO: handle this

  • 主 資深大佬 : bbxiong

    @no1xsyzy 这种设计方式用起来比较方便,其实我奇怪的为啥 selenium 设计这些 api 要抛异常,而不是找不到返回 None

  • 資深大佬 : imn1

    @bbxiong #5
    模块一般是通用的,泛考虑

    例如某个 exif 模块,里面严格执行 exif 规范,dump 的时候一个值错了就会抛异常
    本来 exif 有几百条,一条错误并不影响其他读取,也不影响图片本身显示,批量处理(上千个图片)遇到错误可以跳过就行了,逐个处理异常确实麻烦
    但人家按照规范做,也不能说人家做错了,因为遵守规范总是正确立场,只能自己继承修改以适应自己的需求

  • 資深大佬 : no1xsyzy

    @bbxiong 发现我可能单位写了一堆忘了发……
    应该它的这些 API 就是设计为链式调用的,那显然报一个“元素找不到”的错比“NoneType 没有此属性”的错更合理。
    不过,我设计的话会设计两套 API,一个更简洁的引发异常,更啰嗦的给 None,形如 dct[‘key’] v.s. dct.get(‘key’)
    或者提供一个参数来表示默认值,不提供就引发异常,形如 dct.pop(‘key’, None) v.s. dct.pop(‘key’)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具