我编写了很少的自定义 ftp 服务器,我需要抑制打印异常(嗯,一种特定类型的异常)到控制台,但我希望服务器向客户端发送“550 未采取请求的操作:内部服务器错误”或类似的东西。
但是,当我使用 addErrback() 捕获异常时,我在控制台中看不到异常,但客户端获得了 OK 状态..
我能做什么?
当您在 errback 处理程序中捕获错误时,您应该检查失败的类型并根据应用程序的内部逻辑将错误作为 FTP 错误消息发送到客户端 twisted.protocol.ftp.FTP 使用 self.reply 处理此问题(ERROR_CODE,“描述”)
所以你的代码可能看起来像这样:
from twisted.internet import ftp
MY_ERROR = ftp.REQ_ACTN_NOT_TAKEN
def failureCheck(failureInstance):
#do some magic to establish if we should reply an Error to this failure
return True
class myFTP(ftp.FTP):
def myActionX(self):
magicResult = self.doDeferredMagic()
magicResult.addCallback(self.onMagicSuccess)
magicResult.addErrback(self.onFailedMagic)
def onFailedMagic(self,failureInstance):
if failureCheck(failureInstance):
self.reply(MY_ERROR,'Add relevant failure information here')
else:
#do whatever other logic here
pass