Python,无法将input()转换为int()

时间:2015-11-07 18:26:53

标签: python integer explicit

我正在尝试使用以下代码将input()数据转换为int():

prompt_text = "Enter a number: "
try:
  user_num = int(input(prompt_text))
except ValueError:
  print("Error")

for i in range(1,10):
  print(i, " times ", user_num, " is ", i*user_num)

even = ((user_num % 2) == 0)

if even:
  print(user_num, " is even")
else:
  print(user_num, " is odd")

当我输入 asd2 时,我得到以下奇怪的错误:

Enter a number: asd2 Error 
Traceback (most recent call last):   File "chapter3_ex1.py", line 8, in <module>
    print(i, " times ", user_num, " is ", i*user_num) 
NameError: name 'user_num' is not defined

我做错了什么?

3 个答案:

答案 0 :(得分:3)

您面临的问题是解释器会在try中引发错误并执行except块。之后它将开始执行每一行。这将抛出NameError

您可以通过将程序的其余部分放入else块来克服这个问题。

prompt_text = "Enter a number: "

try:
    user_num = int(input(prompt_text))  

except ValueError:
    print("Error")

else:
    for i in range(1,10):
      print(i, " times ", user_num, " is ", i*user_num)

    even = ((user_num % 2) == 0)

    if even:
      print(user_num, " is even")
    else:
      print(user_num, " is odd")

Python tutorial

引用
  

try ... except语句有一个 可选的else子句 ,当   礼物,必须遵循除了条款以外的所有条款它对代码很有用   如果try子句没有引发异常 ,则必须 执行。

另一种方法是使用 sentinel

prompt_text = "Enter a number: "
user_num = 0 # default value
try:
    user_num = int(input(prompt_text))
except ValueError:
    print("Error")

这也有效。但结果可能不如预期。

Protip - 使用4个空格缩进

答案 1 :(得分:1)

问题不在于转换为int。如果抛出异常,user_num没有得到值,但稍后会使用它。

prompt_text = "Enter a number: "
try:
  user_num = int(input(prompt_text)) # this fails with `asd2`
except ValueError:
  print("Error") # Prints your error

for i in range(1,10):
  print(i, " times ", user_num, " is ", i*user_num) # user_num wasn't assigned because of the error

even = ((user_num % 2) == 0)

if even:
  print(user_num, " is even")
else:
  print(user_num, " is odd")

您可以通过在try-block中放置使用user_num的代码来解决此问题。我还将添加一个创建一个清理功能的函数。

def is_even(num):
  return num%2 == 0

prompt_text = "Enter a number: "
try:
  user_num = int(input(prompt_text))
  for i in range(1,10):
    print(i, " times ", user_num, " is ", i*user_num)
  if is_even(user_num):
    print(user_num, " is even")
  else:
    print(user_num, " is odd")
except ValueError:
  print("Error")

查看ideone here

答案 2 :(得分:1)

这可能不是最干净的解决方案但是它解决了问题,在你的代码中user_num没有被初始化,除非它是一个数字。

prompt_text = "Enter a number: "
user_num = "no Input"
try:
  user_num = int(input(prompt_text))
except ValueError:
  print("Error")

if str(user_num).isnumeric():
  for i in range(1,10):
    print(i, " times ", user_num, " is ", i*user_num)

  even = ((user_num % 2) == 0)

  if even:
    print(user_num, " is even")
  else:
    print(user_num, " is odd")
else:
  print("You did not enter a number")