【问题标题】:NameError when inputting string instead of int输入字符串而不是 int 时出现 NameError
【发布时间】:2018-06-05 01:39:55
【问题描述】:

我正在尝试构建一个简单的程序,在用户输入的数字上运行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

当我想要做的是捕捉用户输入不是整数的内容并打印“请输入整数”时。

以下是我编写的代码,我在 collat​​z() 函数中放置了“try except”语句,我也尝试将它放在 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()

感谢任何人都可以帮助我解决此问题。

【问题讨论】:

  • 您必须将try/except 括号放在numb = input() 周围。正是这一行引发了异常。
  • 啊,谢谢 DyZ,解决了问题。
  • 你应该在 Python 2 中使用raw_input 而不是input
  • 哦,好的,谢谢 juanpa,这是为什么呢?
  • input 正在评估用户输入的任何危险内容。 raw_input 只是给你他们输入的任何内容,换行符已经被去掉了。

标签: python python-2.7 input nameerror


【解决方案1】:

感谢 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!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 2017-09-24
    相关资源
    最近更新 更多