我正在尝试捕捉异常...除了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语句中得到处理?
答案 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":