2014-10-05 4 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)) 

은 내가 잘못을 제외/시도를 사용하고?

답변

2

예, try/except를 잘못 사용하고 있습니다. 비교 결과가 False 인 경우 예외가 아니기 때문에 비교는 예외를 throw하지 않습니다. 두 번째 코드는 이러한 문제를 해결하는 올바른 방법입니다.

0

get_current_player(request).cash >= bid이 항상 작동하고 오류가 발생하지 않으려면 try/except을 사용해야합니다. 두 번째 코드 블록에서와 마찬가지로 if/else을 사용하십시오.

첫 번째 코드 블록이 get_current_player(request).cash >= bid 인 경우 True/False으로 평가됩니다. 이 비교가 ValueError을 생성하지 않는 한 (이유가 분명해 보이지는 않습니다) except 블록이 실행되지 않습니다.

블록은 비교가 False으로 평가되기 때문에 실행되지 않습니다.

편집 :

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 

당신은 어떤을 허용 할 수 있습니다 : 당신이 get_current_player(request).cash >= bid을 평가하는 것은 예외를 발생 할 가능성이 있다고 생각하면 try 블록 내부의 if/else 블록을 넣을 수 비교가 트리거 할 수있는 다른 오류 (예 : AttributeError).

+0

고맙습니다. 보통 현금으로 충분해야합니다. 그것은 그렇게하지 않는 드문 경우입니다. 따라서 try/except를 좋아하는 것 같았습니다. 왜냐하면 플레이어가 충분한 현금을 가지고 있는지 확인하고 싶을 때 중첩을 피하기 때문입니다. 이 목적을 위해 try/except를 사용할 수있는 방법이 있습니까? 아니면 이렇게하는 것이 좋지 않은가요? – Brachamul

+0

@Brachamul 당신은 확실히 둘 다 함께 사용할 수 있습니다 - 그에 따라 내 대답을 편집했습니다. –

0

get_current_player(request).cash >= bid 

오류를 반환해야합니까? 잘못인가? 아니, 그게 왜 ValueError가 없는가.