[英]Python: FileNotFoundError not caught by try-except block
[英]Handling a FileNotFoundError using a try and except block or an elif block if possible
我有一个我想用作路由源的驱动器列表。 我想尝试所有这些,直到函数找到有效的,以免抛出 FileNotFoundError。 我怎样才能最好地做到这一点? 我对如何使用 try 和 except 块处理这种情况知之甚少,但我想要一些具有以下代码中显示的逻辑的东西:
try:
wb = openpyxl.load_workbook(Source_1)
except FileNotFoundError:
wb = openpyxl.load_workbook(Source_2)
except FileNotFoundError:
wb = openpyxl.load_workbook(Source_3)
except FileNotFoundError:
wb = openpyxl.load_workbook(Source_4)
except FileNotFoundError:
wb = openpyxl.load_workbook(Source_5)
except:
print("File Not Found")
最好的方法是使用循环。 但也要考虑其他错误来源。
sources = [Source_1, Source_2, ...]
for source in sources:
try:
wb = openpyxl.load_workbook(source)
except FileNotFoundError:
continue
except Exception as e:
print("Couldn't load the file %s" % e)
break
else:
# work here with the workbook wb
do_work(wb)
break
else:
print("File Not Found")
解释:
continue
将使for
循环移动到下一个源FileNotFoundError
之外还有另一个错误(例如OSError
,循环将正常退出try
块没有抛出异常时,第一个else
块将起作用。 它会有wb
变量。else
块。 换句话说,当没有找到任何文件时。使用@JacobIRR 建议的评论,您可以遍历您的源代码,直到其中一个有效,否则打印错误消息。 这是一个如何实现的示例:
sources = (Source_1, Source_2, Source_3, Source_4, Source_5)
for source in sources:
try:
wb = openpyxl.load_workbook(source)
break
except FileNotFoundError:
pass
else:
print("File Not Found")
正如@JacobIRR 提到的那样做这样的事情,
Sources = [Source_1, Source_2, Source_3, Source_4, Source_5]
for source in Sources:
try:
wb = openpyxl.load_workbook(Source_1)
break
except FileNotFoundError:
continue
else:
print("File Not Found")
我想这段代码应该可以工作
wb = None
for source in [Source_1, Source_2, Source_3, Source_4, Source_5]:
try:
wb = openpyxl.load_workbook(source)
except FileNotFoundError:
continue
except:
raise
if wb is None:
print("File Not Found")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.