Python 输入字符串而不是int时发生名称错误
我试图建立一个简单的程序,运行用户输入的数字。我还使用它尝试在Python中使用“try-except”语句,每当用户输入字符串而不是整数时抛出一个print语句 当输入整数时,程序按预期工作,例如,在这里我输入数字12,得到以下输出:Python 输入字符串而不是int时发生名称错误,python,python-2.7,input,nameerror,Python,Python 2.7,Input,Nameerror,我试图建立一个简单的程序,运行用户输入的数字。我还使用它尝试在Python中使用“try-except”语句,每当用户输入字符串而不是整数时抛出一个print语句 当输入整数时,程序按预期工作,例如,在这里我输入数字12,得到以下输出: $ python collatzSequence.py Enter in a number: 12 6 3 10 5 16 8 4 2 1 但是,当您输入字符串时,我得到以下错误: python collatzSequence.py Enter in a
$ python collatzSequence.py
Enter in a number:
12
6
3
10
5
16
8
4
2
1
但是,当您输入字符串时,我得到以下错误:
python collatzSequence.py
Enter in a number:
ddd
Traceback (most recent call last):
File "collatzSequence.py", line 34, in <module>
main()
File "collatzSequence.py", line 25, in main
numb = input()
File "<string>", line 1, in <module>
NameError: name 'ddd' is not defined
感谢任何人给我的帮助,帮助我解决这个问题。感谢DyZ为我提供的解决方案。 问题是我的“尝试除外”语句放错了位置。我需要在main()函数的try语句中有'numb=input()'行,因为这是引发NameError的行。 我还添加了一个while语句,因此如果用户继续输入字符串,它将继续请求一个整数。输入int后,此循环中断。 以下是固定代码:
# Exploring the 'Collatz Sequence'.
# If number is even, print number // 2 and returns this value.
# If number is odd, print and return 3 * number + 1.
def collatz( number ) :
number = int(number)
# number is even.
if number % 2 == 0 :
print( str(number // 2) )
return number // 2
# number is odd.
else :
print( str(3 * number + 1) )
return 3 * number + 1
# Lets user type in an integer and keeps calling collatz() on that number until the funciton returns the value 1.
def main() :
print( "Enter in a number: " )
# Error handling to make sure number entered is an int.
while True :
try:
numb = input()
break
except NameError :
print( 'Please enter an integer.' )
numb = collatz(numb)
while numb != 1 :
numb = collatz(numb)
if __name__ == "__main__":
main()
给出结果:
$ python collatzSequence.py
Enter in a number:
ddd
Please enter an integer.
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
再次感谢你,戴兹 您必须在行
numb=input()
周围放置try/except
括号。这一行引发了异常。啊,谢谢你,DyZ,这解决了它。你应该在Python中使用raw_input
而不是input
,2哦,好的,谢谢juanpa,这是为什么?input
正在评估用户输入的任何危险内容raw_input
只提供他们键入的任何内容,其中包含已删除的换行符。
$ python collatzSequence.py
Enter in a number:
ddd
Please enter an integer.
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1