从下面的代码中可以看到,我正在使用多个“ with”语句通过SFTP下载。
我想根据错误的来源提出自定义异常(或通常更好地了解问题出在哪里)。
通常,我只是将内容包装在个别的异常中,但是我不确定如何在此处进行处理。
下面的代码不起作用,因为我的自定义异常会冒出来,这意味着我总是会收到ConnectionException。
try:
with pysftp.Connection(self.sftp_details["host"], username=self.sftp_details["user"],
private_key=env.root_dir+"/private.ppk", port=self.sftp_details["port"]) as sftp:
try:
with sftp.cd(self.sftp_details["folder"]):
try:
sftp.get(self.sftp_details["filename"],local_filename)
except Exception as e:
self.logErrorToSheet("The file could not be found on the server.")
raise FileNotFoundException(self.sftp_details)
except Exception as e:
self.logErrorToSheet("The folder could not be found.")
ServerFolderNotFoundException(self.sftp_details)
except Exception as e:
self.logErrorToSheet("A connection could not be made. (%s)" %(e))
raise ConnectionException(e, self.sftp_details)
编辑:
好的,听起来我需要做以下事情:
try:
with pysftp.Connection(self.sftp_details["host"], username=self.sftp_details["user"],
private_key=env.root_dir+"/private.ppk", port=self.sftp_details["port"]) as sftp:
with sftp.cd(self.sftp_details["folder"]):
sftp.get(self.sftp_details["filename"],local_filename)
except Connection as e:
self.logErrorToSheet("A connection could not be made. (%s)" %(e))
raise e
except IOError as e:
self.logErrorToSheet("The file or folder could not be found on the server.")
raise e
我不太确定如何区分文件夹错误(cd)和文件错误之间的区别,但这是我可以研究的另一个问题。