2016-04-10 42 views
0

我試圖檢查輸入函數中輸入的內容是否都是字母字符。基本上我想確保號碼不被輸入。但是,當我鍵入一個數字,例如4時,沒有任何反應。我甚至沒有看到異常錯誤。另外,如果我輸入除「帶寶貝」或「開門」之外的任何內容,則不會啓動bear_room功能。 Haaalp。提前致謝!python 3:嘗試除非沒有工作檢查isalpha函數

def bear_room(): 
    print("there's a bear here") 
    print("the bear has a bunch of honey") 
    print("the fat bear is front of another door") 
    print("how are you going to move the bear?") 

    choice = str(input("(Taunt bear, take honey, open door?: ")) 
    try: 
     if choice.isalnum() == False: 
      if choice == "take honey": 
       print("the bear looks at you then slaps your face off") 
      elif choice == "open door": 
       print("get the hell out") 
     else: 
      bear_room() 
    except Exception as e: 
     print(str(e)) 
     print("numbers are not accepted") 
     bear_room() 

bear_room() 

回答

0

沒有什麼可以觸發例外,因爲在代碼方面,輸入數字是完全合法的。它將檢查choice.isalnum(),對於一個數字它將爲True,然後遞歸調用bear_room()。您希望else部分包含您在異常中獲得的打印,然後擺脫異常處理程序。

0

這裏有幾個問題。

首先,不要將您的輸入投入str。它已經從input以字符串形式進入。

其次,你是否永遠不會拋出一個異常,因爲你正在尋找捕捉你想要捕捉的異常,因爲你的輸入在try/except之外。不僅如此,如果你輸入類似abcd1234的東西,你將不會引發異常。這仍然是一個有效的字符串。

你有獎金問題。永遠不要打開Exception。一定要明確你想要捕捉什麼樣的異常。但是,您不需要嘗試/除了這裏。相反,只需檢查您是否有有效的條目並繼續您的邏輯。

簡單地說,刪除您的嘗試/除了甚至您的isalnum檢查,並檢查輸入的字符串是否符合您的要求。如果沒有,輸出某種錯誤信息:

def bear_room(): 
    print("there's a bear here") 
    print("the bear has a bunch of honey") 
    print("the fat bear is front of another door") 
    print("how are you going to move the bear?") 

    choice = input("(Taunt bear, take honey, open door?: ") 
    if choice == "take honey": 
     print("the bear looks at you then slaps your face off") 
    elif choice == "open door": 
     print("get the hell out") 
    else: 
     print("Invalid entry") 
     bear_room() 

bear_room() 
+0

謝謝,我過去認爲這個過程。 – eric