ste*_*stt 10 python exception-handling
这两者有什么区别:
except:
# do something
Run Code Online (Sandbox Code Playgroud)
和
except BaseException as be:
print(be)
Run Code Online (Sandbox Code Playgroud)
我的意思是在第一种情况下捕获所有可能的异常,但是第二种情况是否正确?
也可以使用第一种情况打印错误消息?
Mar*_*ers 17
实事求是地讲,有没有什么区别之间except:和except BaseException:,任何当前的Python版本.
那是因为你不能只是将任何类型的对象引发为异常.该raise声明明确禁止提出任何其他内容:
[...] raise将第一个表达式计算为异常对象.它必须是子类或实例
BaseException.
大胆强调我的.但情况并非总是如此,在较旧的Python版本(2.4及之前版本)中,您也可以使用字符串作为例外.
那么优点是您可以轻松访问捕获的异常.为了能够添加as targetname,您必须捕获特定类别的异常,并且只BaseException会这样做.
您仍然可以使用以下方法访问当前活动的异常sys.exc_info():
except:
be = sys.ext_info()[1]
Run Code Online (Sandbox Code Playgroud)
选择您认为对您未来的自我和同事更具可读性的内容.
EZL*_*ner 14
接受的答案不完整(至少对于 Python 3.6 及更高版本)。
通过捕获,Exception您可以捕获大多数错误——基本上是您使用的任何模块可能抛出的所有错误。
通过捕捉BaseException,除了上述所有的异常,还搭上类型的例外SystemExit,KeyboardInterrupt以及GeneratorExit。
KeyboardInterrupt例如,通过 catch ,您可以在用户发起退出后阻止代码退出(例如^C在控制台中按下,或在某些解释器上停止启动的应用程序)。这可能是一种想要的行为(例如 - 记录退出),但应格外小心使用!
在上面的示例中,通过 catch BaseException,您可能会导致应用程序在您希望退出时挂起。