Pythonでの安全な逆参照 質問する

Pythonでの安全な逆参照 質問する

Groovy には、NullPointerExceptions を回避するのに役立つ、安全な逆参照のための優れた演算子があります。

variable?.method()

が でない場合にのみがmethod呼び出されます。variablenull

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

ラップされたオブジェクトの型指定は有効なままになります。


  1. いいえ、ありません。

  2. しかし、 をチェックするにはNone、 ではなくif x:と書きますif x is None:。これは重要な違いです。は、おそらく完全に有効な多くの値(特に 0 と同等の数値と空のコレクション)に対してxと評価されますがFalsex is None のみTrue参照がxシングルトン オブジェクトを指している場合は と評価されますNone

  3. 個人的な経験から言うと、このような演算子が必要になることはめったにありません。はい、はNone値がないことを示すために使用されることがあります。しかし、どういうわけか、おそらく慣用的なコードがヌルオブジェクト重大な障害を示すために例外をスローする賢明な場所 - 私はAttributeError: 'NoneType' object has no attribute '...'月に 2 回しか受け取りません。

  4. これは誤った機能かもしれないと私は主張します。にはnull「初期化を忘れた」と「データがない」という2つの意味があります。最初のエラーなので例外をスローする必要があります2 番目のケースでは、通常、「このメソッドを呼び出さないようにする」よりも複雑な処理が必要です。データベース/ORM に を要求してもUserProfile、存在しないため、null代わりに が返されます... メソッドの残りの部分を黙ってスキップしますか? または、(「ライブラリ コード」内にある場合) 適切な例外をスローする (つまり、「ユーザー (コード)」はユーザーが存在しないことを認識し、対応したり無視したりできる) か、(特定の機能をコーディングしている場合) ユーザーに適切なメッセージ (「そのユーザーは存在しないため、友達リストに追加できません」) を表示するか、本当に必要なのでしょうか?

おすすめ記事