我想编写一些仅由特定的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的最佳实践吗?我环顾了一下,但找不到。

最佳答案

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

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


那是毫无目的的报应。

关于python - 放置仅由特定类引发的自定义Python异常的最佳实践位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25557456/

10-11 06:20