Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 输入字符串而不是int时发生名称错误_Python_Python 2.7_Input_Nameerror - Fatal编程技术网

Python 输入字符串而不是int时发生名称错误

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中使用“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 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