実践・上級問題チェック

問題 29 /40

次のコードを実行した場合、【A】と【B】の結果として正しいものはどれか。

import tempfile
from pathlib import Path

with tempfile.TemporaryFile() as f:
    p = Path(f.name)
    print(p.exists())  【A】

print(p.exists())  【B】

選択 1

【A】 エラーになる
【B】 エラーになる

選択 2

【A】 True
【B】 False

選択 3

【A】 True
【B】 True

選択 4

【A】 True
【B】 エラーになる

解説

選択肢1が正解です。

TemporaryFile()関数で作成した一時ファイルは、名前を持ったファイルとして作成される保証がないため、exists()メソッドで存在を確認することができません。

問題文の場合、【A】はTypeErrorになり、【B】はNameErrorになります。

NamedTemporaryFile()関数を使用すると、名前が付いたファイルを作成できます。

問題文のTemporaryFile()関数をNamedTemporaryFile()関数に書き換えると、【A】でTrueとなった後、with文を抜けてファイルが閉じられ、【B】でFalseとなります。


(公式書籍 p.256-257)