このコードを見てください:
>>> class c(object):
... pass
...
>>> a=c()
>>> if a.b.c:
... print 'hello'
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'c' object has no attribute 'b'
静かな!これは問題ではありません。読み続けてください:
誰かがエンタープライズソフトウェアを開発するとき(たとえば、djangoを使用)、ビジネスルールを作成する必要があります。このルールは次のようになります
if invoice.customer.adress.country in ...:
invoice.makeSomeSpecialOffer()
しかし、表現に関係するオブジェクトの1つが存在しない場合があります。次に、エラーを回避するために、文を次のように書き直します。
if invoice.customer and
invoice.customer.adress and
invoice.customer.adress.country and
invoice.customer.adress.country in ...
これは読みにくいです!(hasattrで試すこともできますが、読みにくくなります)。
私の回避策はifステートメントを試してみることですが、この種のエラーを回避するためのよりエレガントな、またはピタトニックな方法はありますか?あなたの好きなテクニックはどれですか?