簡體   English   中英

Python FTP 檢索中斷 FOR 循環。 我用 try-catch 塊修復了它。 為什么它有效?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM