具体的には、open()で指定されたファイル名が '\0' を含んでいる場合に投げられる例外が、TypeError から ValueError へと変わりました。
# Python 3.4
>>> open('\0')
Traceback (most recent call last):
File "", line 1, in
TypeError: embedded NUL character
# Python 3.5
>>> open('\0')
Traceback (most recent call last):
File "", line 1, in
ValueError: embedded null character
この変更は以下のバグレポートの対応が反映されたもののようです。
https://bugs.python.org/issue22215
当然、FileNotFoundError や PermissionError などの OSError系はこれまで通り発生します。TypeError もファイル名が str型でなかった場合などに発生します。
というわけで、Python 3.5において、万全の体制でopen()が投げる例外を受けようとすると、次のように書く必要があります。
try:
open(filename)
except (OSError, TypeError, ValueError):
# deal with error
……何と言うか、3つも Error を並べるのは面倒くさいですね。
0 件のコメント:
コメントを投稿