放置仅由特定类引发的自定义Python异常的最佳实践位置

放置仅由特定类引发的自定义Python异常的最佳实践位置,python,Python,我想编写一些只由特定python类引发的自定义异常,但可能有两种方法。我可以将其作为模块本身的一部分: class FooException(Exception): pass class FooClass(): def something(): # code raise FooException("something went wrong") 或者,我可以将其嵌套在类本身中: class FooClass(): class FooExc

我想编写一些只由特定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


有没有一个蟒蛇式的最佳实践?我找了一下,但没找到

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

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

这是毫无意义的重复。

你的意思是它们只会在类内引发还是只会在类内被捕获?它们只会在类内引发,但可能会从外部被捕获。因为类外的代码可能希望捕获异常,这不仅仅是全班同学都用的,这很有道理。我编辑了这篇文章,使它更具体。