5

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

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

但是,我可以在两个位置查找该文件。我可以使用嵌套尝试来处理这个问题:

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')

或者我可以在第一个 except 块中放一个 pass,然后在下面再放一个:

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 的方式来处理上述情况?

干杯,维克多

4

1 回答 1

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

else您也可以在 for 循环中添加一个子句;也就是说,仅当循环因耗尽而终止时才会执行某些代码(所有位置均无效)。

于 2012-12-18T07:22:22.313 回答