输入字符串而不是 int 时出现 NameError
NameError when inputting string instead of int
我正在尝试构建一个简单的程序,在用户输入的数字上运行 Collatz Sequence。我还使用它来尝试在 Python 中使用 'try except' 语句,方法是在用户输入字符串而不是整数时抛出打印语句。
程序在输入整数时按预期工作,例如我在这里输入数字 12,得到以下输出:
$ 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
当我想要做的是在用户输入非整数的内容时捕获并打印 'Please enter an integer.'
以下是我编写的代码,我将 'try except' 语句放在 collatz() 函数中,我也尝试将它放在 main() 函数中,但我得到了相同的结果. :
# 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 ) :
# Error handling to make sure number entered is an int.
try:
number = int(number)
except NameError :
print( 'Please enter an integer.')
return
# 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: " )
numb = input()
numb = collatz(numb)
while numb != 1 :
numb = collatz(numb)
if __name__ == "__main__":
main()
感谢任何人提供的帮助,帮助我解决这个问题。
感谢 DyZ 解决这个问题。
问题是我把 'try except' 语句放在了错误的位置。我需要在 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
再次感谢 DyZ!
我正在尝试构建一个简单的程序,在用户输入的数字上运行 Collatz Sequence。我还使用它来尝试在 Python 中使用 'try except' 语句,方法是在用户输入字符串而不是整数时抛出打印语句。
程序在输入整数时按预期工作,例如我在这里输入数字 12,得到以下输出:
$ 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
当我想要做的是在用户输入非整数的内容时捕获并打印 'Please enter an integer.'
以下是我编写的代码,我将 'try except' 语句放在 collatz() 函数中,我也尝试将它放在 main() 函数中,但我得到了相同的结果. :
# 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 ) :
# Error handling to make sure number entered is an int.
try:
number = int(number)
except NameError :
print( 'Please enter an integer.')
return
# 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: " )
numb = input()
numb = collatz(numb)
while numb != 1 :
numb = collatz(numb)
if __name__ == "__main__":
main()
感谢任何人提供的帮助,帮助我解决这个问题。
感谢 DyZ 解决这个问题。 问题是我把 'try except' 语句放在了错误的位置。我需要在 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
再次感谢 DyZ!