2010-12-07 88 views

回答

5
author_id = line[5] 
try: 
    author = Author.objects.get(internal_id=author_id) 
except Author.DoesNotExist: #blank excepts are bad and hide errors. 
    author_id = author_mapper[line[5]] 
    author = Author.objects.get(internal_id=author_id) 

您的版本足夠適合爵士樂。但是,您應該添加一個明確的例外來捕捉,因爲空白語句可能相當危險。想象一下,使用internal_id=line[5]提高Author.MultipleItemsReturned的情況。你肯定希望這個提高,和/或分開處理,因爲這是一個可能被隱藏的非常不同的問題。好了,在這種情況下,probabaly不會有,但只是一般,空白except s爲並不好:)

+0

很好的建議,謝謝:) – AP257 2010-12-07 21:11:28

1

IMO,這種讀取更好:

author_id = line[3] 
alternate_id = author_mapper[author_id] 
query = Author.filter(internal_id = author_id) 
alternate_query = Author.filter(internal_id = alternate_id) 
query = query or alternate_query 
author = query[0] 

一些注意事項:你應該能夠保證這些內部id是唯一的(因爲您使用get方法,所以這是安全的)。只要第一個查詢有結果,備用查詢就不會執行。進一步的改進可能是使方法返回查詢和備用查詢。然後,您可以連做一個查詢實例(這是相當便宜的,但如果你真的找光,清潔......)

例子:

author_id = line[5] 
query = RegularQuery(author_id) or AlternateQuery(author_id, author_mapper) 
author = query[0] 

如果有人有什麼霧當兩個查詢由「或」運算符(任何布爾運算符)操作時,它們將以短路方式執行和評估。如果查詢結果爲查詢,則查詢爲真,否則爲假。因此,如果常規查詢有結果,則替代查詢將不會執行。

相關問題