我有一些代码可以:
try:
result = func()
except StandardError as e:
result = e
Run Code Online (Sandbox Code Playgroud)
如何检查是否result包含异常?
使用isinstance(result, Exception)不起作用,因为异常是一个类,而不是一个实例,例如type(ValueError)给出<type 'type'>.
---编辑---
那是愚蠢的; 虽然上面的代码是我正在使用的正确方法func(),但我的测试func()是做什么的return ValueError,而不是raise ValueError.前者返回类,后者返回实例.所以问题不像描述的那样.
虽然我确信这是一个需要重新思考设计逻辑的XY问题,但这是对你当前问题的回答:isinstance工作正常:
>>> try:
... int('a')
... except ValueError as e:
... result = e
...
>>> type(result)
<class 'ValueError'>
>>> isinstance(result, Exception)
True
Run Code Online (Sandbox Code Playgroud)
你的问题是你正在测试ValueError(类),而不是e(a的实例ValueError).也许以下带有a bool(子类为an int)的示例将使这更清楚:
>>> isinstance(bool, int)
False
>>> isinstance(True, int)
True
Run Code Online (Sandbox Code Playgroud)