2015-11-03 38 views
3

我有可能出现只有类FooPython中的内部或外部异常类?

内特定的异常难道是很好用,如下一个内部异常类:

class Foo: 
    class FooError(Exception): 
     pass 

    def bar(self): 
     raise self.FooError('omg') 

或者是更好地把FooErrorFoo外面?

class FooError(Exception): 
    pass 

class Foo: 
    def bar(self): 
     raise FooError('omg') 
+2

如果你把异常置于外面,你可以在代码的许多地方使用相同的代码 –

回答

5

由于出口规则,将它放在外面。这个例外只是在类内提出,但它可能(也可能会)冒泡到代码的其他部分,所以其他模块可能想要捕获它。

如果例外是以外的该类,则可以选择仅导出该异常。如果例外是里面的类,你必须导出整个类的例外,或者使用类似__all__ = [Foo.FooError, ...]的东西,基本上模仿了一个外部例外。

如果这个例外只是在之内,并且在班级内部抓到了,这可能是有道理的,但我仍然不认为它是惯用的。