尝试让try/except
语句正常工作但遇到问题。此代码将采用txt文件并将位置行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)
答案 0 :(得分:4)
except
子句只会捕获raise
块内try
d的异常。尝试将docopy
函数调用放在try
块内:
def hmm(haha):
try:
result = docopy(haha)
it = iter(result)
except ftplib.error_perm:
print "Error Getting File"
答案 1 :(得分:3)
引发错误的代码中的点必须在try
块内。在这种情况下,可能会在docopy
函数内引发错误,但这不会包含在try
块中。
请注意,docopy
会返回None
。因此,当您尝试从iter
中生成None
时,您会引发异常 - 但它不会是ftplib.error_perm
例外,它将是{{1} }}
答案 2 :(得分:0)
我知道OP是古老的,但对于那些渴望在这个问题上得到答案的人们来说。我遇到了类似的问题,具体取决于您的IDE,如果您在任何具有特定异常等的行上有断点,这可能会发生冲突并停止尝试/执行。
答案 3 :(得分:0)
我注意到全局异常可能不起作用,例如, Ctrl + C ,当epub.py
模块执行urllib3
连接触发器KeyboardInterrupt
但无法捕获主线程时,解决方法是将我的清理代码放在{ {1}},例如:
finally
答案 4 :(得分:0)
此示例在Python3.3 +中是通用的,当装饰生成器函数时,装饰的生成器成功返回,因此除未进入装饰器外,魔术发生了yield from f
从而将可包装的内容包装在装饰器中:
from types import GeneratorType
def generic_exception_catcher(some_kwarg: int = 3):
def catch_errors(func):
def func_wrapper(*args, **kwargs):
try:
f = func(*args, **kwargs)
if type(f) == GeneratorType:
yield from f
else:
return f
except Exception as e:
raise e
return func_wrapper
return catch_errors
用法:
@generic_exception_catcher(some_kwarg=4)
def test_gen():
for x in range(0, 10):
raise Exception('uhoh')
yield x
for y in test_gen():
print('should catch in the decorator')
答案 5 :(得分:0)
如果您不确定会发生什么异常,请使用以下代码,因为如果指定了例如:StandardError:除外,并且不是该错误,则不会处理该异常。
try:
# some code
except Exception: # Or only except:
print "Error" # Python 3: print("Error")
答案 6 :(得分:-1)
好吧,我在Visual Studio Code中遇到了同样的问题:
import numpy as np
def func():
try:
a = np.log(-9)
print(a)
except:
print ('exception !') # this will never triggered
func()