具体的には、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 件のコメント:
コメントを投稿