11

try/exceptステートメントを機能させようとしていますが、問題があります。このコードはtxtファイルを受け取り、行0の場所にあるファイルを行1の場所にコピーします。ただし、パスの1つを無効なパスに変更するとエラーftplib.error_permが発生しますが、exceptコマンドはすべてを取得しません。停止します。私は何が間違っているのですか?Python 2.4

import csv
import operator
import sys
import os
import shutil
import logging
import ftplib
import tldftp

def docopy(filename):
        ftp = tldftp.dev()
        inf = csv.reader(open(filename,'r'))
        sortedlist = sorted(inf, key=operator.itemgetter(2), reverse=True)
        for row in sortedlist:
                src = row[0]
                dst = row[1]
                tldftp.textXfer(ftp, "RETR " + src, dst)


def hmm(haha):
    result = docopy(haha);
    try:
        it = iter(result)
    except ftplib.error_perm:
        print "Error Getting File" 


if __name__ == "__main__":
        c = sys.argv[1]
        if (c == ''):
                raise Exception, "missing first parameter - row"
        hmm(c)
4

6 に答える 6

9

この句は、対応するブロック内でexcept実行される例外のみをキャッチします。ブロック内にも関数呼び出しを配置し​​てみてください。raisetrydocopytry

def hmm(haha):
    try:
        result = docopy(haha)
        it = iter(result)
    except ftplib.error_perm:
        print "Error Getting File" 
于 2013-01-22T13:57:08.510 に答える
4

エラーが発生するコード内のポイントは、tryブロック内にある必要があります。この場合、関数内でエラーが発生している可能性がありますが、それはブロックdocopyで囲まれていません。try

docopyを返すことに注意してくださいNoneiterそのため、 outを作成しようとすると例外が発生しますが、それは例外ではなくNoneftplib.error_permTypeError

于 2013-01-22T13:56:25.793 に答える
1

どのような例外が発生するかわからない場合は、次のコードを使用してください。たとえば、except StandardError: を指定すると、例外は処理されません。

try:
    # some code
except Exception: # Or only except:
   print "Error" # Python 3: print("Error")
于 2019-08-23T20:38:17.883 に答える
0

グローバル例外が機能しない可能性があることに気付きました。たとえば、Ctrl+Cモジュールepub.pyurllib3接続トリガーを実行するKeyboardInterruptがメインスレッドでキャッチできない場合、回避策はクリーンアップコードを内部finallyに配置することです。

try:
    main()
except Exception as e:
    clean_up_stuff()  #this one never called if keyboard interrupt in module urllib3 thread
finally: #but this work
    clean_up_stuff() 
于 2018-08-05T12:14:19.023 に答える