放置自定义Python异常的最佳实践场所,这些异常仅由特定类引发

时间:2014-08-28 20:27:46

标签: python

我想编写一些只由特定python类引发的自定义异常,但有两种方法可以实现。我可以将其作为模块本身的一部分来实现:

class FooException(Exception):
    pass

class FooClass():
    def something():
        # code
        raise FooException("something went wrong")

或者,我可以将它嵌套在类本身中:

class FooClass():
    class FooException(Exception):
        pass

    def something():
        # code
        raise FooException("something went wrong")

我个人更喜欢第二种,因为在异常和类之间建立与显式相关的连接似乎更清晰,但是有一些缺点。例如,如果你继承FooClass:

class BarClass(FooClass):
    pass

现在可以将FooClass.FooException引用为BarClass.BarException。

这是否有Pythonic最佳实践?我环顾四周,但我还没能找到一个。

1 个答案:

答案 0 :(得分:3)

在模块(全局)级别保留异常。将它们嵌入到类中只会为想要使用您的类的人提供更多的工作:

try:
    FooClass().something()
except FooClass.FooException:
    pass

这是为了没有好的目的而重演。