PytnonでNVL

PythonでOracleのNVLみたいな、もといNull合体演算子が使いたくて調べたメモ。

Wikipediaにも書いてあるがorを使えばそれっぽいことができる。
書いてあるように0や空文字、FalseもNoneと評価されることは注意。
>>> print(None or "hoge")
hoge
>>> print("fuga" or "hoge")
fuga
>>> print("" or "hoge")
hoge
>>> print(True or "hoge")
True
print(False or "hoge")
hoge
>>> print(1 or "hoge")
1
>>> print(0 or "hoge")
hoge
int()がNoneや空文字をキャストしようとしてエラーになるのも防げる。
>>> print(int(""))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
>>> print(int("" or 0))
0

おまけ

辞書に対してキーがなければ任意の値を返したい場合。
>>> dict = {
...   'key1': 'value1',
...   'key2': 'value2',
... }
>>> print(dict.get('key1', 'foo'))
value1
>>> print(dict.get('foo', 'bar'))
bar
>>> print(dict.get('foo'))
None
KeyError対策にもなって便利。