Groovy には、NullPointerExceptions を回避するのに役立つ、安全な逆参照のための優れた演算子があります。
variable?.method()
が でない場合にのみがmethod
呼び出されます。variable
null
Python で同じことを行う方法はありますか? それとも、 と書く必要がありますかif variable: variable.method()
?
ベストアンサー1
2021年編集:
Python でまさにこの機能を備えた一種のハックである新しいパッケージがあります。リポジトリは次のとおりです。https://github.com/paaksing/nullsafe-python
from nullsafe import undefined, _
value = _(variable).method()
assert value is undefined
assert not value
assert value == None
AttributeError
およびKeyError
も同様に動作します
dic = {}
assert _(dic)["nah"] is undefined
assert _(dic).nah is undefined
ラップされたオブジェクトの型指定は有効なままになります。
いいえ、ありません。
しかし、 をチェックするには
None
、 ではなくif x:
と書きますif x is None:
。これは重要な違いです。は、おそらく完全に有効な多くの値(特に 0 と同等の数値と空のコレクション)に対してx
と評価されますがFalse
、x is None
のみTrue
参照がx
シングルトン オブジェクトを指している場合は と評価されますNone
。個人的な経験から言うと、このような演算子が必要になることはめったにありません。はい、は
None
値がないことを示すために使用されることがあります。しかし、どういうわけか、おそらく慣用的なコードがヌルオブジェクト重大な障害を示すために例外をスローする賢明な場所 - 私はAttributeError: 'NoneType' object has no attribute '...'
月に 2 回しか受け取りません。これは誤った機能かもしれないと私は主張します。には
null
「初期化を忘れた」と「データがない」という2つの意味があります。最初のエラーなので例外をスローする必要があります2 番目のケースでは、通常、「このメソッドを呼び出さないようにする」よりも複雑な処理が必要です。データベース/ORM に を要求してもUserProfile
、存在しないため、null
代わりに が返されます... メソッドの残りの部分を黙ってスキップしますか? または、(「ライブラリ コード」内にある場合) 適切な例外をスローする (つまり、「ユーザー (コード)」はユーザーが存在しないことを認識し、対応したり無視したりできる) か、(特定の機能をコーディングしている場合) ユーザーに適切なメッセージ (「そのユーザーは存在しないため、友達リストに追加できません」) を表示するか、本当に必要なのでしょうか?