2016-07-11 3 views
1

という名前のメソッドfoo()があります。johnという名前です。Python:オブジェクトargを取得し、NPEを1行でチェックしてください

#!/usr/bin/python3 
from random import randint 
class Student(object): 
    name = "" 

def foo(): 
    if randint(0,1) == 0: 
     student = Student() 
     student.name = 'john' 
    else: 
     student = None 
    return student 

私は(のNPEを回避し、foo()には、いくつかの呼び出しを避けること)foo()によって返された学生の名前を取得したいです。

私の実際の解決策は次のとおりです。

student = foo() 
print(student.name if student is not None else None) 

が1行でこれを行うことは可能ですし、一時的な変数を作成せずに?

答えて

1

getattr(obj, 'attr_to_get', default_value)を使用できます。

あなたの例では、解はgetattr(foo(), 'name', None)になります。

+0

'dic [getattr(foo()、 'name'、None)]'(ここで私はキーエラーを受け取ります:なし) – roipoussiere

+1

使用してください'dict.get( 'attr'、デフォルト)'だから 'dict.get(getattr(foo()、 'name'、None)、None)'。しかし、たぶんゴルフをしないでください。可読性がコードのコンパクトさを上回ることがあります。 –

関連する問題