Python:异常类可以识别引发它的对象吗?

时间:2016-07-28 17:50:10

标签: python class exception-handling

当Python程序引发异常时,异常处理程序是否可以识别引发异常的对象?

如果没有,我相信我可以通过定义这样的异常类来找到...

class FoobarException(Exception) :
    def __init__(self,message,context) :
        ...

......并像这样使用它:

    raise FoobarException("Something bad happened!", self)

我宁愿不必通过" self"但是,除了每个例外。

1 个答案:

答案 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子类编写任何处理代码。