2017-11-06 4 views
0
----> 1 if person.network is None: 
     2  print('person.network does not exist') 
     3 

AttributeError: 'Person' object has no attribute 'network' 

「ネットワーク」が存在しないかどうかを確認しています。しかし、それが存在しないときは失敗し、Pythonエラーがスローされます。私はこれがどうやって起こっているのか少し迷っています。この正確な問題を1行目にしてはいけませんか?Noneをテストすると、属性が存在しないエラーがスローされます

実際のコードでは、「ネットワーク」が定義されていない場合、失敗する前に約10レコードが正しく記録されます。あなたがPythonの関数はhasattrに建て使用することができます

+0

存在しない属性と属性が[なし]に設定されている属性とは異なります。 – user2357112

+1

あなたはおそらく[this](https://stackoverflow.com/questions/610883/how-to-know-if-an-object-has-an-attribute-in-python)のようなことをしようとしています。 –

+1

'hasattr()を使用してください。 –

答えて

3

インスタンス属性Noneの値を持つと、それは(あなたのケース)まったく存在しないとの違いがあります。

network = getattr(person, "network", None) 

最後のパラメータがある:あなたが値を取得する必要がある場合は、getattr()を使用して安全に行うことができます

if hasattr(person, "network"): 
    # do stuff 

:適切にインスタンスが存在する属性かどうかを確認するには、hasattr()メソッドを使用することができます人がnetwork属性を持たない場合に返されるデフォルト値。

+1

説明をいただきありがとうございます! – hellstorm

3

if hasattr(person, "network") : 
-1

あなたは「許可を求めるよりも許してほしい」という正式な例があります。

私は(GETATTRの使用をお勧めします

getattr(class, 'attribute', foo) 

属性が存在しない場合、fooが返されます。

関連する問題