4

Objective-Cでは、実行できます。存在し ない[variable valueForKeyPath:@"abc.def"]場合は、最終的に値を取得し、エラーや例外を取得しません。これは本当に便利です。Pythonにこのようなものはありますか?私はあなたができることを知っています(少なくとも辞書のために)[[variable abc] def]abcvariablenil

abc = variable.get('abc', None)
if abc:
    def = abc.get('def', None)

また

try:
    def = variable.get('abc').get('def')
except:
    pass

これは信じられないほど冗長に思えます。オブジェクトの属性にアクセスしたり、None値を取得したりするだけの場合、より簡単な方法はありますか?

4

4 に答える 4

4

どうですか

def = variable.get('abc', {}).get('def',None)

まあ、これはdictでのみ機能します。

于 2012-07-17T03:39:15.753 に答える
3

ネストされた呼び出しを使用してgetattr

def = getattr( getattr(variable, 'abc', None), 'def', None)

また、メソッドを省略して、キャッチすることもできますAttributeError

try:
    def = variable.abc.def
except AttributeError:
    def = None
于 2012-07-17T03:49:20.130 に答える
1

あなたが望むもののための短い組み込み構文はありません。これを行うヘルパー関数を作成するか、collections.defaultdict便利な場合があります。

于 2012-07-17T03:36:33.200 に答える
1

Pythonは、診断が難しいバグにつながる可能性があるため、この動作を設計上回避しています。例外を発生させることにより、プログラマーはdict.get()、getattr()などを使用してデフォルト値を明示的に要求するか、ルックアップが失敗した場合に対処する必要があります。プログラムは、プログラムでエラーが発生した場所で正確に停止します。

Objective C(およびデバッグが不快なことで有名なPHP)の場合、変数が正しく設定されていないことに気付く前に、プログラムが長時間継続する可能性があります。一般に、エラーが発生してから時間が経つほど、原因を特定するのが難しくなります。これは不便です。

于 2012-07-17T04:00:26.893 に答える