Pythonic处理多个可能的文件位置的方法? (不使用嵌套的trys)

时间:2012-12-18 07:19:01

标签: python exception-handling

我有一个需要查找某个文件的Python脚本。

我可以使用os.path.isafile(),但我听说这是糟糕的Python,所以我试图抓住异常。

但是,有两个地方我可以查找该文件。我可以使用嵌套的trys来处理这个问题:

try:
    keyfile = 'location1'
    try_to_connect(keyfile)
except IOError:
    try:
        keyfile = 'location2'
        try_to_connect(keyfile)
    except:
        logger.error('Keyfile not found at either location1 or location2')

或者我可以在第一个除了块之外放一个传递,然后在另一个下面添加一个传递:

try:
    keyfile = 'location1'
    try_to_connect(keyfile)
except IOError:
    pass
try:
    keyfile = 'location2'
    try_to_connect(keyfile)
except:
    logger.error('Keyfile not found at either location1 or location2')

然而,是否有更多的Pythonic方法来处理上述情况?

干杯, 维克多

1 个答案:

答案 0 :(得分:10)

for location in locations:
    try:
        try_to_connect(location)
        break
    except IOError:
        continue
else:
    # this else is optional
    # executes some code if none of the locations is valid
    # for example raise an Error as suggested @eumiro

您还可以在for循环中添加else子句;这是一些代码只有在循环通过耗尽终止时才会执行(没有一个位置有效)。