2017-10-12 71 views
-2
try: 
     user_name = str(input("Enter your full name: ")) 
    except: 
     print("Enter a string") 

    user_age = int(input("Enter your age: ")) 
    user_country = str(input("Enter the country you live in: ")) 
    user_postcode = str(input("Enter your postcode: ")) 

當我輸入一個整數它移動到下一個變量的第一個,但我想它說「輸入字符串」這個try/except塊在Python中有什麼問題?

+0

輸入已經返回一個字符串 –

+0

也許它有助於讀爲'嘗試並繼續,除非它擰緊做這個,而不是'。由於塊中的所有內容都是字符串,因此不會出現問題。 – percusse

回答

0

任何輸入已經是一個字符串。當您讀取整數(例如123)時,輸入將以字符串形式出現(如「123」)。將它投射到str什麼都不做。你需要更加具體地瞭解你期望的輸入,並且測試

例如,您可能想要確定所有字符都在特定集合中,例如字母,空格和某些標點符號。那麼你需要爲這些特徵寫一個或兩個特定的測試。

0

我想你要測試是否有在名稱中的數字: 你可以做這樣的事情:

while True: 
    user_name = str(input("Enter your full name: ")) 
    if [i for i in list(user_name) if i.isdigit()]: 
     print("invalid input") 
    else: 
     break 

或者,也許更好的檢查,所有的投入都在字母:

alphabet = list("abcdefghijklmnopqrstuvwxyz") 

while True: 
    errors = 0 

    user_name = str(input("Enter your full name: ")) 
    for i in user_name.split(" "): 
     for ii in i: 
      if ii not in alphabet: 
       errors += 1 

    if errors: 
     print("You have {} errors".format(errors)) 
    else: 
     break 
0

返回類型input始終是str的一個實例。即使用戶輸入看起來是一個數字,結果仍然是一個包含數字的字符串。例如如果他們輸入5,它仍以字符串'5'的形式給出。

所以你需要做的是檢查它是否是一個整數。

例如

user_name = input("Enter your full name: ") 
try: 
    int(user_name) 
except ValueError: 
    pass 
else: 
    print("Enter a string") 

上面的代碼首先將輸入讀入一個變量,這將始終是一個字符串。然後嘗試使用int()方法將其轉換爲整數。如果轉換失敗(這是我們想要的)。我們只是照常進行(使用pass)。否則它會打到else並打印我們的信息。

0

except-嘗試的一部分 - 除非try -part中的內容引發錯誤,否則僅運行。

一個例子是由零整除。當試圖在python shell中運行它時,下面的代碼會引發錯誤;

print(5/0) 

您可以捕獲此錯誤,並打印自己的消息,而不是打印自己的python shell。在這種情況下,ZeroDivisionError是python將拋出的某種類型的錯誤。用下面的代碼,python只會捕獲這個錯誤,而不是其他的。

try: 
    print(5/0) 
except ZeroDivisionError: 
    print("Cannot divide by zero") 

如果你想捕獲所有的錯誤,你只是簡單地寫except而不是except zeroDivisionError

except -block內的代碼不會運行,因爲在嘗試運行try -block內的內容時沒有錯誤。 try-block內部發生的事情是簡單地將一個輸入分配給一個變量。此行沒有任何錯誤,因此except - 塊不會運行。

有不同的方法來獲得你想要的功能。您可能想重複一遍,輸入需要是一個字符串,直到用戶實際輸入一個字符串。你可以用while -loop來做到這一點。如果字符串轉換爲整數轉換失敗,則引發的特定錯誤是ValueError

isString = False 
while not isString: 
     userInput = input("Enter here: ") 

     try: 
      int(userInput) 
     except ValueError: 
      # if string to integer fails, the input is a string 
      isString = True 
     else: 
      print("Please enter a string") 

while循環以上,只要是isString運行False。首先我們嘗試從字符串轉換爲整數。如果這會引發錯誤,則輸入是一個字符串,因此我們將isString設置爲True,while循環將不再運行。如果轉換成功,它意味着輸入實際上是一個整數,因此else語句將運行,打印用戶需要輸入的字符串。