在异常中包装“ with”语句的最佳方法是什么?

时间:2019-10-11 18:36:18

标签: python

从下面的代码中可以看到,我正在使用多个“ 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)和文件错误之间的区别,但这是我可以研究的另一个问题。

0 个答案:

没有答案