2014-10-05 28 views
-1

下面的代碼不起作用:嘗試/除了不要再追一「大於」錯誤

try: 
    get_current_player(request).cash >= bid # does the player have enough cash for this bid ? 
except ValueError: 
    messages.error(request, "You don't have the necessary funds to place a bid of <span class='cash'>%d</span> !" % (bid)) 
messages.success(request, "You placed a bid of %d !" % (bid)) 

當出價高於當前玩家的現金越高,成功消息被打印,而不是錯誤消息。

但是,下面的代碼工作,指示值是正確的:

if get_current_player(request).cash >= bid : # does the player have enough cash for this bid ? 
    messages.success(request, "You placed a bid of %d !" % (bid)) 
else : 
    messages.error(request, "You don't have the necessary funds to place a bid of <span class='cash'>%d</span> !" % (bid)) 

我使用的try /除錯了嗎?

回答

2

是的,你正在使用嘗試/除了錯誤。比較不會拋出任何異常,因爲如果結果爲假,則不是特例。你的第二個代碼是解決這個問題的正確方法。

0

如果您希望比較get_current_player(request).cash >= bid始終有效且不會產生錯誤,則不應使用try/except。在第二個代碼塊中使用if/else

隨着您的第一個代碼塊,get_current_player(request).cash >= bid已嘗試並評估爲True/False。只要這種比較不產生ValueError(並且沒有明顯的原因),except塊不會執行。

except塊將不會運行,因爲比較評估爲False

編輯:如果您覺得有一種可能性,即評估get_current_player(request).cash >= bid將引發異常,你可以把if/elsetry塊內:

try: 
    if get_current_player(request).cash >= bid: 
     messages.success(request, "You placed a bid of %d !" % (bid)) 
    else: 
     messages.error(request, "You don't have the necessary funds to place a bid of <span class='cash'>%d</span> !" % (bid)) 

except ValueError: 
    # handle the ValueError 

您可能要允許任何比較可能觸發的其他錯誤(例如AttributeError)。

+0

我明白了,謝謝。通常情況下,現金應該足夠。這不是一件罕見的事情。因此,在我看來,就像嘗試/除非是最好的方式,因爲當我只想檢查玩家是否有足夠的現金時,避免了嵌套。有沒有辦法使用try /除了這個目的,還是不是這樣做的好習慣? – Brachamul 2014-10-05 16:56:03

+0

@Brachamul你當然可以一起使用 - 我相應地編輯了我的答案。 – 2014-10-05 17:44:45

0

爲什麼這個

get_current_player(request).cash >= bid 

應該返回錯誤?這是錯的嗎?不,這就是爲什麼你沒有這個ValueError。