2013-08-27 57 views
0

我想檢查一下Django應用程序中的某些xml是否具有某些元素/節點,如果不是隻是跳過該代碼塊。我檢查的元素實存使用hasattr(),它應該返回false如果元素不存在:hasattr()拋出AttributeError

if hasattr(product.ItemAttributes, 'ListPrice') \ and hasattr(product.Offers.Offer.OfferListing, 'PercentageSaved') \ and hasattr(product.LargeImage, 'URL'):

除了在我的情況下,它拋出一個屬性錯誤: AttributeError at /update_products/ no such child: {http://webservices.amazon.com/AWSECommerceService/2011-08-01}LargeImage

我不明白爲什麼它會拋出一個錯誤,而不是僅僅返回false而讓我跳過代碼塊?

+4

也許'product.ItemAttributes','product.Offers.Offer.OfferListing','product.LargeImage'之一不存在?最有可能的是'product.LargeImage'。 –

回答

3

錯誤是抱怨LargeImage。這是由這個表達式造成的:product.LargeImage。你可能想先檢查一下,甚至更好,把它放在try/except塊中。

+0

啊我沒有意識到hasattr依賴於現有的父屬性。我只是打字,你的答案解決了我的問題,但隨後給了我一個新的問題,即知道目標元素是否存在,而不必檢查它是否存在父項。然而,你想更新的答案,關於'try/except'塊,我認爲是要走的路,謝謝! – KingFu

+1

@KingFu'hasattr'不依賴於現有的父屬性。這個錯誤會在沒有任何'hasattr'調用的情況下發生。問題是你有一個表達式試圖引用一個不存在的屬性。 – Marcin

+0

我明白了,我基本上是想傳遞一個不存在的對象。感謝您的額外評論,以便爲我解決這個問題 – KingFu

相關問題