我正在尝试编写一个快速的小程序,该程序将通过CSV文件解析拉用户名和密码,并测试登录到FTP以创建目录并使用这些用户名和密码将其删除。我已经编写了一个try catch,以便它可以输出出现的任何错误,以便我可以查看可能需要调整的FTP登录。问题是当我运行它时,如果任何登录中断而不是继续运行,它将停止。我尝试之后尝试使用pass
和finally
,但它不会返回循环。任何帮助表示赞赏。
import csv
import ftplib
from ftplib import FTP
with open ('Filename.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
lineCount = 0
rowCount = 0
for row in readCSV:
username = row[rowCount]
passwordFTP = row[rowCount+1]
print (username)
ftp = FTP('ftp.org') #place the FTP address here
ftp.set_debuglevel(2) #this is set to highest debug level
try:
ftp.login(user='usernameGoesHere', passwd='passwordGoesHere', acct='')
except ftplib.all_errors as e:
errorcode_string = str(e).split(None, 1)[0]
pass
finally:
ftp.cwd('/TestDir')
ftp.mkd('testDir')
ftp.rmd('testDir')
ftp.quit()
pass
最佳答案
将代码放在finally
中实际上并没有什么用。尽管您已经放置了pass
语句,但它在此代码中没有任何作用。在登录时遇到错误时,程序将记录错误并仍然尝试为给定的连接创建一个文件夹。
而是将cwd
,mkd
和其他方法移动到try
块。如果在那里抛出错误,except
将捕获该错误并停止执行。
绝对没有必要在pass
中的任何地方放置try
语句。 finally
块中唯一仍可以保留的东西是ftp.quit()
,因此它会清理,如果其中一个操作失败,则关闭连接,但是另一方面,如果登录失败,会发生什么?
做类似的事情:
with FTP('ftp.org') as ftp
try:
ftp.login(user='usernameGoesHere', passwd='passwordGoesHere', acct='')
ftp.cwd('/TestDir')
ftp.mkd('testDir')
ftp.rmd('testDir')
except ftplib.all_errors as e:
errorcode_string = str(e).split(None, 1)[0]
使用上下文管理器(
with
语句)将帮助您手动退出。
关于python - 使用FTP忽略python中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59431810/