当Python程序引发异常时,异常处理程序是否可以识别引发异常的对象?
如果没有,我相信我可以通过定义这样的异常类来找到...
class FoobarException(Exception) :
def __init__(self,message,context) :
...
......并像这样使用它:
raise FoobarException("Something bad happened!", self)
我宁愿不必通过" self"但是,除了每个例外。
答案 0 :(得分:0)
如果您希望异常本身找出它在堆栈中的位置,它会很快变得混乱。你可以这样做:
import inspect
frameinfo = inspect.getframeinfo(inspect.stack()[1][0])
caller_name = frameinfo[2]
file_name = frameinfo[0]
但是,如果您正在寻找引发异常的函数或方法,那么这只会真正起作用,而不是在寻找拥有它的类时。
你最好做这样的事情:
class MyException(Exception):
pass
# ... somewhere inside a class
raise MyException("Something bad happened in {}".format(self.__class__))
这样您就不必为Exception
子类编写任何处理代码。