我想编写一些只由特定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最佳实践?我环顾四周,但我还没能找到一个。
答案 0 :(得分:3)
在模块(全局)级别保留异常。将它们嵌入到类中只会为想要使用您的类的人提供更多的工作:
try:
FooClass().something()
except FooClass.FooException:
pass
这是为了没有好的目的而重演。