如何处理除一个异常之外的所有异常?
try:
something
except <any Exception except for a NoChildException>:
# handling
像这样的东西,除了不破坏原始回溯:
try:
something
except NoChildException:
raise NoChildException
except Exception:
# handling
如何处理除一个异常之外的所有异常?
try:
something
except <any Exception except for a NoChildException>:
# handling
像这样的东西,除了不破坏原始回溯:
try:
something
except NoChildException:
raise NoChildException
except Exception:
# handling
答案是简单地做一个bare raise
:
try:
...
except NoChildException:
# optionally, do some stuff here and then ...
raise
except Exception:
# handling
这将重新引发最后抛出的异常,原始堆栈跟踪完好无损(即使它已被处理!)。
我会将此作为对已接受答案的改进。
try:
dosomestuff()
except MySpecialException:
ttype, value, traceback = sys.exc_info()
raise ttype, value, traceback
except Exception as e:
mse = convert_to_myspecialexception_with_local_context(e, context)
raise mse
这种方法通过在捕获 MySpecialException 时维护原始堆栈跟踪来改进已接受的答案,因此当您的顶级异常处理程序记录异常时,您将获得指向原始异常抛出位置的回溯。
Python 新手……但这不是一个可行的答案吗?我使用它并且显然有效....并且是线性的。
try:
something
except NoChildException:
assert True
except Exception:
# handling
例如,我使用它来摆脱(在某些情况下无用)从 os.mkdir 返回异常 FileExistsError。
那就是我的代码是:
try:
os.mkdir(dbFileDir, mode=0o700)
except FileExistsError:
assert True
我只是接受目录无法以某种方式访问的事实作为中止执行。
我发现了一个上下文,其中捕获所有错误但有一个并不是一件坏事,即单元测试。
如果我有一个方法:
def my_method():
try:
something()
except IOError, e:
handle_it()
然后它可能有一个看起来像这样的单元测试:
def test_my_method():
try:
my_module.my_method()
except IOError, e:
print "shouldn't see this error message"
assert False
except Exception, e:
print "some other error message"
assert False
assert True
因为您现在已经检测到 my_method 刚刚抛出了一个意外的异常。