は、このコードを見てください属性:書き込みビジネスルールの可能な、存在しないの連鎖
>>> 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()
のように見えます。しかし、いくつかの回、表現上のオブジェクトのinvolvedsの一つが存在しません。その後、には、エラーを回避私はと文を書き換えsould:
if invoice.customer and
invoice.customer.adress and
invoice.customer.adress.country and
invoice.customer.adress.country in ...
これは読みにくくです! (hasattrで試してみることもできますが、あまり読みにくい)。
私のwork arroundはif文をtryで囲みますが、この種のエラーを避けるためにはよりエレガントなまたはpythatonicな方法がありますか?あなたの好きなテクニックはどれですか?
この月http://stackoverflow.com/questions/610883/how-to-know-if-an-object-has-an-attribute-in-python – ditkin
@ditkinの複製である、このリンクについての感謝!しかし、私の質問は、オブジェクトが属性を持っているかどうかを知ることではなく、紛らわしい可能性のある属性を連鎖させるエレガントな方法でコードを書く方法です。私はタイトルを変更しました。どうもありがとう。 – danihp
'invoice'、' custom'、 'address'などのオブジェクトの種類は? –