我怎么能写一个尝试/except块捕获所有异常?
当前回答
要捕获所有可能的异常,请捕获BaseException。它位于Exception层次结构的顶部:
Python 3: https://docs.python.org/3.10/library/exceptions.html#exception-hierarchy
Python 2.7: https://docs.python.org/2.7/library/exceptions.html#exception-hierarchy
try:
something()
except BaseException as error:
print('An exception occurred: {}'.format(error))
但正如其他人提到的,你通常不需要这个,只有在非常特定的情况下。
其他回答
要捕获所有可能的异常,请捕获BaseException。它位于Exception层次结构的顶部:
Python 3: https://docs.python.org/3.10/library/exceptions.html#exception-hierarchy
Python 2.7: https://docs.python.org/2.7/library/exceptions.html#exception-hierarchy
try:
something()
except BaseException as error:
print('An exception occurred: {}'.format(error))
但正如其他人提到的,你通常不需要这个,只有在非常特定的情况下。
我刚刚发现了在Python 2.7中测试if异常名称的小技巧。有时我在代码中处理了特定的异常,所以我需要一个测试,看看这个名字是否在处理的异常列表中。
try:
raise IndexError #as test error
except Exception as e:
excepName = type(e).__name__ # returns the name of the exception
我添加了奖金方法,可以捕捉异常与完整的回溯,这可以帮助您了解更多的错误。
Python 3
import traceback
try:
# your code goes here
except Exception as e:
print(e)
traceback.print_exc()
非常简单的例子,类似于这里发现的:
http://docs.python.org/tutorial/errors.html#defining-clean-up-actions
如果您试图捕获所有异常,那么将所有代码放在“try:”语句中,而不是“print”执行可能抛出异常的操作。
try:
print "Performing an action which may throw an exception."
except Exception, error:
print "An exception was thrown!"
print str(error)
else:
print "Everything looks great!"
finally:
print "Finally is called directly after executing the try statement whether an exception is thrown or not."
在上面的例子中,你会看到这样的输出顺序:
1)执行可能引发异常的操作。
2) Finally在执行try语句后直接调用,无论是否抛出异常。
3)“抛出异常!”或“一切看起来都很好!”这取决于是否抛出异常。
希望这能有所帮助!
除了一个裸露的except:子句(其他人说你不应该使用它),你可以简单地捕获Exception:
import traceback
import logging
try:
whatever()
except Exception as e:
logging.error(traceback.format_exc())
# Logs the error appropriately.
您通常只考虑在代码的最外层这样做,例如,如果您想在终止之前处理任何其他未捕获的异常。
except Exception相对于bare except的优点是,它不会捕获一些异常,最明显的是KeyboardInterrupt和SystemExit:如果你捕获并吞下了它们,那么任何人都很难退出你的脚本。
推荐文章
- “克隆”行或列向量
- 在python shell中按方向键时看到转义字符
- 在pip install中方括号是什么意思?
- 使用Matplotlib以非阻塞的方式绘图
- 使用sklearn缩放Pandas数据框架列
- 如何创建关键或附加一个元素的关键?
- virtualenv的问题-无法激活
- 是否可以使用scikit-learn K-Means聚类来指定自己的距离函数?
- 如何在Python中删除文本文件的文件内容?
- 一个干净、轻量级的Python扭曲的替代品?
- 在Python中从字符串中移除所有非数字字符
- 在Python中,如何以排序的键顺序遍历字典?
- Python中的多行f-string
- 批量归一化和退出的排序?
- Python中的“@=”符号是什么意思?