簡體   English   中英

如何將try和except合並到python中的代碼塊中

[英]how to incorporate try and except into a block of code in python

我正在使用python中的collat​​z序列代碼。 代碼應該給我一系列以1結尾的數字。當我輸入數字時,我在這里的代碼就是這樣做的。

    try:
    number = int(input('Pick a number'))
except ValueError:
    print('Error! input a number')
def collatz(number):
            if number % 2 == 0:
                x = number // 2
                return x
            else:
                x = 3 * number + 1
                return x

while number != 1:
        number = collatz(number)
        print(number)

但是,當我嘗試通過輸入一個字母來調用try和except函數時,我得到了所需的錯誤消息,但我也得到了一個N​​ameError。

Traceback (most recent call last):
  File "/home/PycharmProjects/collatz/collatz.py", line 14, in <module>
    while number != 1:
NameError: name 'number' is not defined
Error! input a number *Desired Error Message*

當我刪除try和except函數時,我不會收到此錯誤。 我已經嘗試將'name'定義為全局變量,並且還使用縮進來解決但似乎沒有任何效果。 我非常感謝任何幫助。

我正在使用python 3.6。

你會得到NameError的原因是因為number根本就沒有定義。 int的調用失敗,因此對number的賦值永遠不會發生,您捕獲並打印錯誤,然后繼續。 要強制用戶輸入有效數字,您必須重復提示,直到用戶輸入正確的輸入。

def read_number():
    while True:
        try:
            return int(input('Pick a number'))
        except ValueError:
            print('Error! Input a number')

然后,要讀取您執行的一系列數字:

while True:
    number = read_number()
    if number == 1:
        break

如果您ValueError引起人們的關注,那我覺得你真的不限定number在其他任何地方。 這就是你的while循環引發NameError

暫無
暫無

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

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