扭曲:失败与错误

时间:2010-08-10 18:09:40

标签: python exception exception-handling twisted

我应该何时使用twisted.python.failure.Failure,何时应该使用twisted.internet.error.ConnectionDone之类的内容?或者我应该twisted.python.failure.Failure(twisted.internet.error.ConnectionDone),如果是,我应该在什么情况下这样做?

1 个答案:

答案 0 :(得分:9)

Failure表示异常和回溯(通常与当前堆栈跟踪不同)。在构造异步异常时,应该使用Failure。因此,当您要发送错误的Deferred时,或者当您打算调用IProtocol.connectionLostClientFactory.clientConnectionFailed等方法时。这是因为在这种情况下,您希望能够将不同的堆栈跟踪与当前堆栈跟踪之外的异常相关联。

您不应该使用Failure(ConnectionDone),因为Failure的正确单参数调用接受异常实例,而不是异常类。因此,请使用Failure(ConnectionDone())。您还可以使用零参数表单创建新的FailureFailure()。这仅在存在“当前”异常时才有效,例如在except语句的套件中。它使用当前异常及其回溯来构造Failure

您还可以构造一个带有三个参数的Failure,一个异常类,实例和回溯。这通常使用sys.exc_info()的返回值来完成。

如果您只想提出异常,则无需创建Failure。只需执行您在Python程序中通常执行的操作即可引发异常:raise SomeException(...)