2015年11月6日

Python 3.5の小さな変更点

Python 3.4 → 3.5 の変更点の1つに、open()関数が投げる例外の変更があります。


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

コメントを投稿