python - Python:pysftp 异常处理
问题描述
我正在使用 pysftp 和 Python 3.7 来设置 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 工作
BOGUS_DIR
但我知道一个不存在的事实。就像 pysftp 没有引发异常cd()
,或者我抓错了(因此我的 python 代码没有正确完成)。
同样isdir()
,无论我作为参数输入什么,True
即使目录不存在,它也总是返回。
如果我因错误而更改连接参数,我会捕获连接失败异常。
pyftp 处理异常是错误的,还是我的代码有问题?我应该不信任 pysftp 并直接使用 Paramiko 吗?
解决方案
好吧,我想通了。
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
没有做任何事情,实际上没有对它做任何事情。
推荐阅读
- javascript - 未捕获的类型错误:即使在删除所有节点和 svg 后,也无法在数字“1”上创建属性“vx”得到此错误
- elasticsearch - 将 Logstash 输入发送到多个输出
- python - 如何在python中从字典中替换NaN
- swift - 快速更新领域中的一系列项目
- php - 使用 file_put_content 上传图像数据时松散的 Mime 类型
- python - Google Colaboratory 本地主机中没有 tensorflow
- sql - PostgreSQL 获取带有物品的订单
- node.js - DynamoDB 数据模型
- c# - System.DLLNotFoundException 在 Mac 上使用 Xamarin
- java - JavaFX:添加元素的 ObservableArrayList 冻结应用程序