我有这样的代码:
try:
# do stuff
except SomeSpecificException as sse:
if sse.some_property == some_special_value:
# handle the exception in a special way
else:
handle_exception_normally()
except:
handle_exception_normally()
我希望捕获特定的异常并以特殊的方式处理它,但前提是它具有特定的属性。如果它没有这个属性,我希望它能像处理其他异常(日志、尖叫等)一样被处理
上面的代码可以工作,但是如果可能的话,我希望避免重复handle_exception_normally()
(DRY以及所有这些)。你知道吗
仅仅把raise
放在第一个except
块的else
子句中是行不通的。一个父try
块会捕获它,但是同一块中的catch all子句不会。你知道吗
我可以嵌套两个try
块,但它不是很优雅;我宁愿只使用
上面的代码。你知道吗
有更好的办法吗?你知道吗
注意,我使用的是python3。你知道吗
我会选择:
Moses Koledoye建议:
它较短,但需要一些特殊的值始终是
!= None
,并且属性对于异常是唯一的。你知道吗例外歧视的例子,用
e.args[0]
:使用
__class__.__name__
:使用
isinstance()
(CPU密集型)时:我知道OP说他们不想这样做,但我要用嵌套的
try
块。我认为这是最具可读性的方法:相关问题 更多 >
编程相关推荐