2010-04-01 143 views
0

我無法運行['abc'].append(MyModel.objects.all()),因爲如果MyModel沒有條目,它將生成異常'NoneType' object is not iterable無法附加Model.objects.all()

任何解決辦法或在C像? : ++

編輯: 我的發言實際上是

','.join([ str(e) for e in ['abc','def'].append(MyModel.objects.all()) ]) 

看來,問題是由追加引起的()返回NoneType。我通過創建一個變量來保存列表來解決這個問題,然後extend()

+2

你有什麼異常?如果數據庫中沒有對象,Model.objects.all()應該返回空列表。 – 2010-04-01 12:16:42

回答

2

它可能是最好要明確,而不是隱式的(和避免使用or短路propoerties這可能會導致錯誤:

my_objects = MyModel.objects.all() 
if my_objects: 
    [a,b,c].extend(my_objects) 
0

不應該是+ =而不是追加?

+0

爲什麼要這樣? 'list.append(x)'是一個有效的方法http://docs.python.org/tutorial/datastructures.html – 2010-04-01 13:20:25

2

怎麼樣:

['abc'].append(MyModel.objects.all() or []) 
+0

OP的問題是由就地追加列表引起的。所以你不能在列表理解中做到這一點。 – Dingle 2010-04-02 12:33:20

1

Model.objects.all()is a QuerySet那就是迭代(見the source)。將迭代器傳遞給list.extend工作得很好:迭代器的內容很好地展開到列表的末尾。

注意:將它傳遞給list.append會將迭代器對象本身放入列表中,因此很可能您想要extend()

1

沒有從append方法,其中發生在地方返回換句話說,你的語句相當於

[str(e) for e in None] 

這自然引起了NoneType例外。解決的辦法是有一個單獨的語句追加或延長的方法,然後按照blokeley的建議是明確的。

+0

是的,這就是我所做的 – 2010-04-02 16:33:31