[英]Python FTP retrieve breaks the FOR loop. I fixed it with try-catch block. Why does it work?
我正在通過 FTP 協議連接到我工作場所的一些機器人,以自動收集備份數據。 腳本應遍歷所有文件夾並下載其中的所有文件。 但是,當我運行下面的代碼時,python 腳本for folder in Folder_List:
第一次迭代后循環。 這很奇怪,因為當我試圖通過在終端中輸入這些命令來查看導致錯誤的原因時,一切都沒有錯誤。
在這里評論部分代碼后,我發現ftp.retrbinary('RETR '+ filename, file.write)
導致循環中斷。 在機器人操作系統中,父文件夾是“/ROBOT”,其他文件夾在里面是這樣的:“/ROBOT/JOB”或“/ROBOT/DAT”
from ftplib import FTP
import os
import os.path
try:
ftp = FTP('192.10.100.1')
ftp.login('user', 'password')
ftp.getwelcome()
ftp.cwd('ROBOT/')
save_dir_full = '/home/mint/Documents/robot_data'
Folder_List = ftp.nlst()
# Folder_List should be similar to this:
# Folder_List = ['JOB', 'DAT', 'CND', 'SYS', 'PRM', 'LST', 'CSV', 'LOG']
for folder in Folder_List:
if not(os.path.exists(save_dir_full +'/'+folder)):
try:
os.makedirs(save_dir_full +'/'+folder)
except:
#print('directory already exists')
pass
ftp.cwd(folder)
filenames = ftp.nlst() # get filenames within the directory
for filename in filenames:
local_filename = os.path.join(save_dir_full +'/'+folder+'/'+ filename)
file = open(local_filename, 'wb')
# THERE \/
ftp.retrbinary('RETR '+ filename, file.write)
file.close()
print(filename)
ftp.cwd('..')
ftp.quit()
except:
print('Could not connect to ftp device')
添加 try 塊后,循環沒有中斷,程序成功完成:
try:
ftp.retrbinary('RETR '+ filename, file.write)
except:
pass
你知道它為什么有效嗎?
你知道它為什么有效嗎?
首先要做的是仔細看看發生了什么,為此,替換:
try:
ftp.retrbinary('RETR '+ filename, file.write)
except:
pass
和
try:
ftp.retrbinary('RETR '+ filename, file.write)
except Exception as e:
print(e)
並觀察您的代碼會生成什么。 作為 bare except
更一般的注意用法,不建議在 python 中使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.