将Exception传递给next except语句

时间:2015-07-16 09:44:01

标签: python exception

我正在尝试捕捉异常...除了Python中的块。该程序尝试使用os.makedirs创建目录树。如果它引发了WindowsError:目录已经存在,我想捕获异常并且什么都不做。如果抛出任何其他异常,我会捕获它并设置自定义错误变量,然后继续使用该脚本。 从理论上讲,以下是:

try:
    os.makedirs(path)
except WindowsError as e: 
    if "directory already exists" in e:
        print "Folder already exists, moving on."
    else: raise
except Exception as e:
    print e
    error = 1

现在我想对此进行一些增强,并确保WindowsError的except块仅处理错误消息中包含“目录已存在”的异常,而不处理其他内容。如果还有其他一些WindowsError我想在下一个except语句中处理它。但不幸的是,以下代码不起作用,并且不会捕获异常:

var = input("Input LineA (x1,y1,x2,y2) ")
print var[0],var[1],var[2],var[3]
lineA = ((float(var[0]), float(var[1])), (float(var[2]), float(var[3])))
print lineA

我怎样才能实现我的第一个except语句专门捕获“目录已存在”异常而所有其他语句在第二个except语句中得到处理?

1 个答案:

答案 0 :(得分:4)

使用一个例外块和特殊情况你在那里处理;您只需使用isinstance()来检测特定的异常类型:

try:
    os.makedirs(path)
except Exception as e:
    if isinstance(e, WindowsError) and "directory already exists" in e:
        print "Folder already exists, moving on."
    else:
        print e
        error = 1

请注意,我不依赖于容器般的异常性质;我明确地测试了args属性:

if isinstance(e, WindowsError) and e.args[0] == "directory already exists":