[英]how to incorporate try and except into a block of code in python
我正在使用python中的collatz序列代碼。 代碼應該給我一系列以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函數時,我得到了所需的錯誤消息,但我也得到了一個NameError。
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.