5

特定のファイルを探す必要がある Python スクリプトがあります。

os.path.isafile() を使用することもできますが、それは悪い Python だと聞いたので、代わりに例外をキャッチしようとしています。

ただし、ファイルを探す可能性のある場所が 2 つあります。これを処理するには、ネストされた試行を使用できます。

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 ブロックにパスを配置し、そのすぐ下に別のパスを配置することもできます。

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

elsefor ループに句を追加することもできます。つまり、一部のコードは、ループが枯渇して終了した場合にのみ実行されます (いずれの場所も有効ではありません)。

于 2012-12-18T07:22:22.313 に答える