Python: pysftp异常处理
Python: pysftp exception handling
我正在使用带有 Python 3.7 的 pysftp 来设置 SFTP 客户端脚本。
我的代码(简化和最小化):
import pysftp
import sys
# Variables
destination_dir = 'BOGUS_DIR'
server = 'myserver.mydomain.com'
user = 'my_user'
key = 'my_key'
port = 22
# cnopts
mycnopts = pysftp.CnOpts()
mycnopts.log = True
mycnopts.compression = True
mycnopts.ciphers = None
mycnopts.hostkeys = None
try:
with pysftp.Connection(server, username=user, private_key=key, port=port, cnopts=mycnopts) as sftp:
try:
with sftp.cd(destination_dir):
print("OK cd worked")
except:
print("NOT OK cd failed")
e = sys.exc_info()
print("Exception: {0}".format(e))
if sftp.isdir(destination_dir):
print("OK isdir")
else:
print("NOT OK isdir")
except:
print("Connection failure.")
e = sys.exc_info()
print("Exception: {0}".format(e))
输出是:OK cd worked
但我知道 BOGUS_DIR
确实 不 存在。就像 pysftp 没有在 cd()
上引发异常,或者我抓错了(因此我的 python 代码没有正确完成)。
与 isdir()
相同,无论我输入什么作为参数,它总是 returns True
即使目录不存在。
如果我因为某些错误而更改了我的连接参数,我会捕捉到连接失败异常。
是pyftp处理异常错误,还是我的代码有问题?我应该不信任 pysftp 并直接使用 Paramiko 吗?
如果目录不存在,您会从远程 shell 尝试 运行 命令时收到错误消息。在此代码中,您试图捕获只能由 sftp
引发的异常。也许,你应该在每次执行 shell 命令后检查 sftp
模块应该返回的状态码
好的,我想我明白了。
如果目录不存在,sftp.cd()
不会引发异常。只有对坏目录的操作才可以。所以如果我像这样修改我的代码:
....
try:
with sftp.cd(destination_dir):
sftp.listdir()
print("OK ce worked")
except:
print("NOT OK cd failed")
e = sys.exc_info()
print("Exception: {0}".format(e))
....
由于 sftp.listdir()
无法使用不存在的目录,因此我得到了一个例外。
几乎像 sftp.cd
除了设置当前目录的值之外什么都不做,实际上没有对它做任何事情。
我正在使用带有 Python 3.7 的 pysftp 来设置 SFTP 客户端脚本。
我的代码(简化和最小化):
import pysftp
import sys
# Variables
destination_dir = 'BOGUS_DIR'
server = 'myserver.mydomain.com'
user = 'my_user'
key = 'my_key'
port = 22
# cnopts
mycnopts = pysftp.CnOpts()
mycnopts.log = True
mycnopts.compression = True
mycnopts.ciphers = None
mycnopts.hostkeys = None
try:
with pysftp.Connection(server, username=user, private_key=key, port=port, cnopts=mycnopts) as sftp:
try:
with sftp.cd(destination_dir):
print("OK cd worked")
except:
print("NOT OK cd failed")
e = sys.exc_info()
print("Exception: {0}".format(e))
if sftp.isdir(destination_dir):
print("OK isdir")
else:
print("NOT OK isdir")
except:
print("Connection failure.")
e = sys.exc_info()
print("Exception: {0}".format(e))
输出是:OK cd worked
但我知道 BOGUS_DIR
确实 不 存在。就像 pysftp 没有在 cd()
上引发异常,或者我抓错了(因此我的 python 代码没有正确完成)。
与 isdir()
相同,无论我输入什么作为参数,它总是 returns True
即使目录不存在。
如果我因为某些错误而更改了我的连接参数,我会捕捉到连接失败异常。
是pyftp处理异常错误,还是我的代码有问题?我应该不信任 pysftp 并直接使用 Paramiko 吗?
如果目录不存在,您会从远程 shell 尝试 运行 命令时收到错误消息。在此代码中,您试图捕获只能由 sftp
引发的异常。也许,你应该在每次执行 shell 命令后检查 sftp
模块应该返回的状态码
好的,我想我明白了。
如果目录不存在,sftp.cd()
不会引发异常。只有对坏目录的操作才可以。所以如果我像这样修改我的代码:
....
try:
with sftp.cd(destination_dir):
sftp.listdir()
print("OK ce worked")
except:
print("NOT OK cd failed")
e = sys.exc_info()
print("Exception: {0}".format(e))
....
由于 sftp.listdir()
无法使用不存在的目录,因此我得到了一个例外。
几乎像 sftp.cd
除了设置当前目录的值之外什么都不做,实际上没有对它做任何事情。