Python中的try/except不生效
我在尝试使用 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"