【问题标题】:Simple Python error exercise简单的 Python 错误练习
【发布时间】:2016-11-24 21:11:28
【问题描述】:

我有一个非常基本的任务,但我就是无法得到我正在寻找的正确错误。这是作业:

10-6 补充:提示输入数字时的一个常见问题是当人们提供文本而不是数字时。当您尝试将输入转换为 int 时,您将收到 TypeError。编写一个提示输入两个数字的程序。将它们加在一起并打印结果。如果任一输入值不是数字,则捕获 TypeError,并打印友好的错误消息。通过输入两个数字然后输入一些文本而不是数字来测试您的程序。

这是我所拥有的:

print("Please enter two numbers and this program will add them together!")
try:
    num_1 = int(input("What is your first number?"))
    num_2 = int(input("What is your second number?"))
    answer = num_1 + num_2
    print(str(num_1) + " + " + str(num_2) + " = " + str(answer))
except TypeError:
    print("Please make sure you enter a number next time.")

我已经重新安排了大约一个小时,无论我做什么,我都无法得到 TypeError,只有 ValueError。我怎么能在这种情况下得到一个 TypeError,或者这本书是错的,在这种情况下不可能得到一个 TypeError??

【问题讨论】:

  • 如果我没记错的话,我还以为是ValueError

标签: python


【解决方案1】:
>>> int('abc')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'abc'

书错了。

【讨论】:

  • 这本书没有错,如果它是在python 2仍然使用input时编写的。 OP 编写了代码。
  • @Jean-FrançoisFabre Python 2 的 input 不会为我能想到的任何非人为输入提出 TypeError,而且它也会使 int 多余。它说“当你尝试将输入转换为 int 时,你会得到一个 TypeError”。
  • oooooh,这本书是错的,你是对的。而且这个例子毫无意义......
【解决方案2】:

尝试类似的操作时会抛出 TypeError

answer = 2 + '3'

您的练习有点误导,因为在您应该编写的程序中,这种情况永远不会发生。正如您所说,尝试将str 显式转换为int 时可能出现的错误是ValueError。所以是的,用

捕获ValueError
except ValueError:

你可以走了。

此外,您正在将 int 转换回 str 与行

answer = num_1 + str(num_2)

这是不正确的。你应该这样做

answer = num_1 + num_2

【讨论】:

  • 如果输入有效数字,上面的代码中总是会发生这种情况。
  • 按照上面的修改代码应该不会出现这种情况。
【解决方案3】:

这本书没有错。该问题实际上并没有要求您转换为int

同样只需更改为num_1 = input("What is your first number?")num_2,如果其中一个输入恰好是字符串,则会触发您的异常处理。

当然,这有点令人困惑,因为“当您尝试将输入转换为 int,[...]”这一行但它没有要求您明确地进行此转换。它可能只是指将+ 与整数和字符串一起使用时发生的隐式转换。

要了解更多关于 Python 的知识,您还可以测试如果两个输入都是字符串会发生什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2020-09-24
    • 1970-01-01
    • 2013-02-08
    相关资源
    最近更新 更多