我创建了一个函数,但可能会弹出错误。这就是为什么我想使用异常将所有错误概括为同一条消息。
但是,此函数包含多个sys.exit()
调用。
因此,如果引发错误,我想让我的代码跳转到except
处理程序,除非它是由sys.exit()
. 我该怎么做呢?
try:
myFunction()
except:
print "Error running myFunction()"
def myFunction():
sys.exit("Yolo")
我创建了一个函数,但可能会弹出错误。这就是为什么我想使用异常将所有错误概括为同一条消息。
但是,此函数包含多个sys.exit()
调用。
因此,如果引发错误,我想让我的代码跳转到except
处理程序,除非它是由sys.exit()
. 我该怎么做呢?
try:
myFunction()
except:
print "Error running myFunction()"
def myFunction():
sys.exit("Yolo")
你不应该使用毯子except
,而是抓住Exception
:
try:
myFunction()
except Exception:
print "Error running myFunction()"
该类Exception
是大多数异常的基类,但不是 SystemExit
. 与GeneratorExit
andKeyboardInterrupt
一起SystemExit
是BaseException
instead 的子类:
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- Everything else
Exception
另一方面也是 的子类BaseException
,其余的 Python 异常类都是从它派生的,而不是BaseException
直接派生的。捕获Exception
将捕获所有这些派生异常,但不会捕获兄弟类。
请参阅异常层次结构。
因此,您应该很少使用一揽子except:
声明。始终尝试将 except 处理程序限制为特定异常,或者最多限制catch Exception
。
虽然知道您要捕获的异常是有效的,但还是有多种选择。下面使用 sys 库捕获所有异常并回溯处理异常消息。第一个代码块有点多余,但演示了如何将异常分配给变量并进行解释。请记住,异常作为带有错误类、消息和回溯的元组返回。如下:
import sys
import traceback
try:
myfunction()
except Exception as e:
e = sys.exc_info()
print('Error Return Type: ', type(e))
print('Error Class: ', e[0])
print('Error Message: ', e[1])
print('Error Traceback: ', traceback.format_tb(e[2]))
通常,您只是在寻找错误类,这可以非常简洁地完成。(注意毯子除外。)
try:
myFunction() except:
print('Error: ', sys.exc_info()[0])
快乐的错误捕捉!