我有一个包含以下代码的代码库:
try:
do_stuff()
except:
print "yes, it's catching EVERYTHING"
不幸的是,我没有足够快的方法来知道会出现哪种异常类型,并且在遇到异常时无法让系统崩溃。
这使调试变得地狱。
我想通过让特定的异常漏掉(例如语法错误等)来使自己更轻松。
有可能吗?赶上一切,但有一些特定的例外?
谢谢!
答案 0 :(得分:4)
您可以执行以下操作:
try:
do_stuff()
except (SyntaxError, <any other exception>):
raise # simply raises the catched exception
except Exception:
print "yes, it's catching EVERYTHING"
此外,除非确实需要,否则除非有异常说明,否则切勿使用 except
,因为它也会捕获KeyboardInterrupt
和GeneratorExit
。至少应指定Exception
;参见builtin exception hierarchy。
请注意,正如@tobias_k在其以下注释中所述,SyntaxError
是在实际运行脚本之前检测到的,因此不需要捕获它。
对于挑战,我寻找了一种真正抓住SyntaxError
的方法,我发现的唯一情况是以下情况(但还有其他情况,请参阅@brunodesthuilliers的评论):
try:
eval(input('please enter some Python code: '))
except SyntaxError:
print('oh yeah!')
$ python syntax_error.py
please enter some Python code: /
oh yeah!
我的结论是,如果您需要抓住SyntaxError
,这意味着您的代码库做了一些比您向我们展示的还要丑的事情……我希望您有很多勇气;)