在Python中,捕获“所有”异常的最佳方法是什么?
except: # do stuff with sys.exc_info()[1]
except BaseException as exc:
except Exception as exc:
捕获可以在线程中执行。
我的目标是记录普通代码可能抛出的任何异常,而不屏蔽任何特殊的Python异常,例如那些指示进程终止等的异常。
还需要获得异常的句柄(例如通过上面包含exc
的子句)。
发布于 2011-08-23 12:28:28
如果您需要捕获所有异常并为所有异常执行相同的操作,我建议您这样做:
try:
#stuff
except:
# do some stuff
如果不想屏蔽“特殊”的python异常,请使用Exception基类
try:
#stuff
except Exception:
# do some stuff
对于一些与管理相关的异常,请显式捕获:
try:
#stuff
except FirstExceptionBaseClassYouWantToCatch as exc:
# do some stuff
except SecondExceptionBaseClassYouWantToCatch as exc:
# do some other stuff based
except (ThirdExceptionBaseClassYouWantToCatch, FourthExceptionBaseClassYouWantToCatch) as exc:
# do some other stuff based
python文档中的exception hierarchy应该是一个有用的读物。
发布于 2011-08-23 13:09:27
except Exception:
vs except BaseException:
:捕获Exception
和BaseException
之间的不同之处在于,根据exception hierarchy异常(如SystemExit ),KeyboardInterrupt和GeneratorExit在使用except Exception
时不会被捕获,因为它们直接从except BaseException:
继承而来:
这两者之间的区别主要是在python 2 (AFAIK)中,只有当使用旧样式类作为异常时才会引发,在这种情况下,只有表达式较少的except子句才能捕获异常例如。
类NewStyleException (异常):pass try: raise NewStyleException except:打印" caught“类OldStyleException: pass try: raise OldStyleException except BaseException:打印”引发OldStyleException时捕获的BaseException“except : print "Caught"
https://stackoverflow.com/questions/7160983
复制相似问题