在Try/Except语句块中多次尝试

5
我有一些Python代码,可以接受两个不同的文件名,因此我想做的是尝试第一个文件名,如果出现异常,则尝试第二个文件名,如果第二次尝试失败,则引发异常并处理错误。
所以基本的逻辑是:
first try this:
   f = file(name1)
if not, then try this
   f = file(name2)
else
   error()

我相信我可以用嵌套的try/except块来完成这个任务,但那不是一个好的解决方案。此外,如果我想扩展到像20个不同的文件名之类的东西,那么嵌套的try/except块就会变得非常混乱。
谢谢!

请重复运行Python函数,直到异常不再抛出。 - Fred Nurk
2个回答

19

你可以简单地使用一个for循环:

for name in filenames:
    try:
        f = open(name)
        break
    except IOError:
        pass
else:
    # error

6
很棒的解决方案,而且是在 for 循环中使用 else 子句的一个很好的例子!我需要记住这个。 - Tim Pietzcker
我特别喜欢这个解决方案,尤其是因为它可以轻松地扩展到不止两个文件。 - cledoux
嗯,基本上这就是我提出的问题。 - devin

5
您可以使用try ... except的循环,如下所示:
for f_name in names:
    try:
        f = open(f_name, 'r')
        # do something
        break # Exit from the loop if you reached this point
    except:
        print 'error, going to try the next one'

1
我不理解为什么这个被downvote了,它和另一个解决方案是相同的,而且提交时间只有一分钟的差距。 - devin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接