对于这样的块:

try:
    #some stuff
except Exception:
    pass

pylint 引发警告 W0703“捕获“异常””。为什么?

有帮助吗?

解决方案

它被认为好做法通常不捕捉根异常对象,而是捕捉更具体的 - 例如IOException的

考虑如果发生内存溢出异常 - 简单地使用“通”是不会在一个良好的状态,离开你的程序

差不多应该捕获异常的唯一时间是在你的程序,在那里你可以(尝试)记录它,显示一个错误,和优雅,你可以退出的顶层。

其他提示

这是很好的做法是只捕获的类型一个很窄的范围内。 “异常”太一般了 - 你最终会赶上不只是你计划的错误,但其他错误太多,这可能掩盖了代码中的错误,这将是更快地诊断,如果他们不抓根本,或者可能会由单一的非常高的水平的异常处理程序可以更好地处理。

说了这么多,因为python2.6的,醒目异常已经成为了很多更合理的,因为所有的,你会不会想赶上(SystemExit,一个KeyboardInterrupt)的异常不再从Exception继承。他们不是从普通BaseException,而不是继承。这已被,以便使捕捉异常相对无害故意进行,因为它是这样一个共同的习惯用法。

请参阅 PEP 3110 获得详细信息及未来的计划。

,因为它认为你赶上太多。和它的权利。

当东西...例外发生

异常升高。它通常是一件好事,该程序将终止。

您可能要忽略一些例外,但国际海事组织没有很好的理由受凉基类这样的。

就像格雷格的回答一样,“异常”是一个基类,异常应该从这个类派生,另请参阅 异常.Exception.

这里有一个非常有用的 错误列表 pydocs

另请注意非常方便的回溯模块,它允许您找出异常发生的位置。仅使用 '除了:...' 将向您展示在您的情况下最应该使用的错误。例如,尝试这个代码(切换注释),也许你会接受它:

import traceback
#absent = 'nothing'
try:
    something = absent
except  NameError:
    traceback.print_exc()
else:
    print("you get here only when you uncomment 'absent'") 

捕捉异常(无需重新认识)有2个非常糟糕的副作用:被吃掉的错误,让你失去堆栈跟踪,而且还CTRL-C(或任何突破关键是你的操作系统)也被处理这里。

的像这样的程序的典型的行为是他们要么不能停止,或CTRL-C使控制流程前进跳过(到异常处理程序),然后继续。那么无论是代码不能被打断,或者你需要敲定的Ctrl-C来得到它停止。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top