0

これがJava 8または9のパイプラインにあることは知っていますが、Pythonでこれを行う方法が必要だと思います. たとえば、複雑な式を書いていて、すべてのレベルで null チェックを追加するのが面倒だとします (以下の例)。

post_code = department.parent_department.get('sibling').employees.get('John').address.post_code

いくつかの中間値が「なし」であることを心配したくありません。たとえば、parent_department に兄弟キーがない場合、post_code に割り当てられた None をシャントして返したいとします。何かのようなもの

post_code = department?.parent_department?.get('sibling')?.employees?.get('John')?.address?.post_code

これは Python 2.7.1 で実行できますか? これはデバッグ中の問題が増えることを意味しますが、すべての事前チェックを行ったと仮定し、いずれかの値が null の場合は内部エラーを意味するため、特定の行が失敗したというエラー トレースを取得するだけで十分です。

これはより冗長な方法です。ランダムな例外をスローしないワンライナーが必要です

def get_post_code(department):
    if department is None:
        return None
    if department.parent_department is None:
        return None
    if department.parent_department.get('sibling') is None:
        return None
    ... more checks...
    return post_code = department.parent_department.get('sibling').employees.get('John').address.post_code
4

2 に答える 2

2

次に、存在しないアイテムにアクセスしようとして発生した例外をキャッチしますpost_codeNone

try:
    post_code = department.parent_department.get('sibling').employees.get('John').address.post_code
except (AttributeError, KeyError):
    post_code = None
于 2013-03-14T14:02:47.143 に答える
0

実際、これに対する有効な答えの 1 つは、これらの関数を連結するためにモナド (モナドの可能性もある) の観点から考え始めることです。非常に初歩的なチュートリアルがhttps://github.com/dustingetz/dustingetz.github.com/blob/master/_posts/2012-04-07-dustins-awesome-monad-tutorial-for-humans-in-python にあります。 md

于 2013-03-19T10:30:22.337 に答える