Python中的try/except不生效

14 投票
7 回答
85045 浏览
提问于 2025-04-17 13:21

我在尝试使用 try/except 语句,但遇到了一些问题。这个代码会读取一个文本文件,然后把第0行的文件路径复制到第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)

7 个回答

1

如果你不确定会出现什么样的错误,可以使用下面的代码。因为如果你指定了比如说:except StandardError:,但实际上出现的不是这个错误,那么这个错误就不会被处理。

try:
    # some code
except Exception: # Or only except:
   print "Error" # Python 3: print("Error")
4

代码中引发错误的地方必须放在 try 块里。在这个例子中,错误很可能是在 docopy 函数里面产生的,但这个函数并没有被放在 try 块中。

需要注意的是,docopy 返回的是 None。所以,当你试图从 None 创建一个可迭代对象时,就会引发异常——但这不会是 ftplib.error_perm 的异常,而是 TypeError

11

这个except部分只会捕捉在对应的try块里面发生的错误。你可以试着把docopy这个函数的调用也放到try块里面:

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

撰写回答