Python 在Try/Except块中多次尝试

Python 在Try/Except块中多次尝试,python,exception,Python,Exception,我有一些python代码,我可以接受两个不同的文件名,所以我想尝试第一个文件名,如果出现异常,那么尝试第二个文件名,如果第二次尝试失败,那么引发异常并处理错误 因此,基本逻辑是: first try this: f = file(name1) if not, then try this f = file(name2) else error() 我很确定我可以用嵌套的try/except块来实现这一点,但这似乎不是一个好的解决方案。另外,如果我想放大到20个不同的文件名,那么t

我有一些python代码,我可以接受两个不同的文件名,所以我想尝试第一个文件名,如果出现异常,那么尝试第二个文件名,如果第二次尝试失败,那么引发异常并处理错误

因此,基本逻辑是:

first try this:
   f = file(name1)
if not, then try this
   f = file(name2)
else
   error()
我很确定我可以用嵌套的try/except块来实现这一点,但这似乎不是一个好的解决方案。另外,如果我想放大到20个不同的文件名,那么try/except块的嵌套将变得非常混乱


谢谢

您可以简单地使用
for
循环:

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

你可以做一个
循环,试试。。。除了像这样的

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'

非常好的解决方案,也是在
for
循环中有用地应用
else
子句的一个非常好的示例!我需要记住这一点。我喜欢这个解决方案,尤其是因为它可以轻松扩展到两个以上的文件。好吧,这基本上就是我要问的问题。类似的:我不明白为什么这个被否决了,它和另一个是同一个解决方案,并且在另一个一分钟内发布。