2014-05-21 24 views
0

我遇到了一個奇怪的問題,嘗試除了我用來捕獲無效數據輸入到我正在寫的簡單黑傑克遊戲外的塊。 。使用Try和Except Block時出現'NoneType'錯誤

def PickNumberOfPlayers(): 
    global log 

    try: 
     inputs = int(input("How Many Players Would You Like?: ")) 
     PlayersNumber = inputs 
     log.write("How Many Players Would You Like?: \n") 
     return PlayersNumber 

    except ValueError: 
     print("Try Typing in A Valid Number") 
     log.write("Try Typing in A Valid Number\n") 
     PickNumberOfPlayers() 

然後我有一個方法GameStart(),它開始了一些方法調用:

def GameStart(): 
    global ListOfPlayers 

    for i in range(0, int(PickNumberOfPlayers())): 
     name = input("What Would You Like This Players Name To Appear As?:") 
     ListOfPlayers.update({name: Player(0, name)}) 

    for key, value in ListOfPlayers.items(): 
     value.AccountSetup() 
     value.Bet() 

    for key, value in ListOfPlayers.items(): 
     value.PlayerDeal() 
    Dealer.Deal() 

當我運行的代碼,並輸入正確的值(一個有效整數),沒有問題。當我第一次進入一個無效數字(字符串或字符)我得到相應的消息「,在一個有效的數字試着鍵入,然後當我輸入一個有效的整數我得到的錯誤 -

for i in range(0, int(PickNumberOfPlayers())): 
TypeError: int() argument must be a string or a number, not 'NoneType' 

任何主意?

+0

'global'在這裏沒有必要。避免遞歸。改用while循環。對於日誌記錄,有日誌記錄模塊,它可以在屏幕上同時寫入並進行歸檔。而不是更新使用索引:'ListOfPlayers [name] = Player(0,name)'。一般情況下避免使用「全局」。 – Daniel

回答

1

當你調用PickNumberOfPlayers()except,你不回它的價值。做return PickNumberOfPlayers()代替。

+0

當我在嘗試失敗後遞歸地調用函數時,函數應該從頭開始循環遍歷並請求一個值,解析它然後返回它....是不是會發生什麼? – wannawin

1

您應修改PickNumberOfPlayers總是返回一個int。

def PickNumberOfPlayers(): 
    global log 

    while 1: 
     try: 
      return int(input("How Many Players Would You Like?: ")) 
     except ValueError: 
      print("Try Typing in A Valid Number") 
      log.write("Try Typing in A Valid Number\n") 
相關問題