2012-12-14 40 views
1

我的代碼是:如何使一個簡單的Python分支停止,如果需求發現?

varA = 5 
varB = 'dog' 
if type(varB) == 'string': 
    print("string involved") 
elif type(varA) == 'string': 
    print("string involved") 
else: 
    if varA > varB: 
     print("bigger") 
    elif varA == varB: 
     print("equal") 
    elif varA < varB: 
     print("smaller") 

我得到的第8行的錯誤,我想要的代碼不就行7 else語句的反應,如果它已經達到了要求,如果(3號線)或ELIF(LINE5) !

另外,如何使用'或'方法,使它加入if(line3)和elif(line5)語句?

回答

4

嘗試使用isinstance檢查type

varA = 5 
varB = 'dog' 
if isinstance(varA, str) or isinstance(varB, str): 
    print("string involved") 
else: 
    if varA > varB: 
     print("bigger") 
    elif varA == varB: 
     print("equal") 
    else: 
     print("smaller") 

在這裏,你正在檢查這兩個變量是str類型的,如果他們中的任何一個,你知道一個字符串是參與,因此將不執行else代碼。

or可以通過將兩個條件基本上組合成一條線來完成,如示例中所示。這是不是一個大問題,另外一種方式來模擬or語句是使用any,如果任何條件True,檢查和執行如果是這樣:

if any((isinstance(varA, str), isinstance(varB, str))): 
    # Code... 

這派上用場,當你有一個龐大的數據結構和需要做類似的or比較。該and相當於是all,具有相同的語法,只是用all代替any

if all((isinstance(varA, str), isinstance(varB, str))): 
    # This code will evaluate if all values are strings 

如果你有一大堆的檢查和厭倦打字isinstance,可以通過進一步捆綁的那部分有點使用組合的用generatoranyall

if any(isinstance(x, str) for x in (varA, varB)): 
    # Code 
+0

最後一個條件是沒有必要的。它應該是'別的'。 – John

+0

@John是的,我只是複製原始代碼,但好點 - 我會刪除:) – RocketDonkey

+0

是的,我想到了:) +1 – John

0

發生什麼事是type()返回一個類型對象,而不是一個字符串,所以你比較type(varB) = <type 'str'>與實際字符串string,他們是不一樣的。

然後你比較5和一個字符串,由於無法比較它們而引發錯誤。

This SO question詳細解釋了一系列檢查類型的不同方法。

相關問題