簡體   English   中英

Python 中的這個 try/except 塊有什么問題?

[英]What's wrong with this try/ except block in Python?

    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: "))

當我為第一個輸入一個整數時,它會移動到下一個變量,但我希望它說“輸入一個字符串”

任何輸入都已經是一個字符串。 當您讀取一個整數(例如 123)時,輸入是一個字符串(例如“123”)。 將它轉換為str什么都不做。 你需要了解你所期望的輸入,並測試遠遠更具體。

例如,您可能想要確定所有字符都在一個特定的集合中——例如字母、空格和某些標點符號。 然后,您需要針對這些特征編寫一兩個特定的測試。

我想您想測試名稱中是否有數字:您可以執行以下操作:

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

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並打印我們的消息。

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 塊中發生的事情只是將輸入分配給變量。 該行沒有拋出錯誤,因此except -block 不會運行。

有多種方法可以獲得您想要的功能。 您可能想重復輸入必須是字符串,直到用戶實際輸入字符串。 你可以用一個while循環來做到這一點。 如果字符串到整數轉換失敗,則拋出的特定錯誤是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")

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM