扭曲:失败与错误

Cla*_*diu 4 python exception-handling exception twisted

什么时候应该使用一个twisted.python.failure.Failure,当我应该使用类似twisted.internet.error.ConnectionDone?或者我应该这样做twisted.python.failure.Failure(twisted.internet.error.ConnectionDone),如果是的话,在什么情况下我应该这样做?

Jea*_*one 9

A Failure表示异常和回溯(通常与当前堆栈跟踪不同).您应该Failure在构造异步异常时使用.所以,当你要火了Deferred一个错误,或者当你要调用一个方法类似IProtocol.connectionLostClientFactory.clientConnectionFailed.这是因为在这种情况下,您希望能够将不同的堆栈跟踪与当前堆栈跟踪之外的异常相关联.

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

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

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