【问题标题】:Try/except statement not catching ValueError when converting string to int in python 3在 python 3 中将字符串转换为 int 时,Try/except 语句未捕获 ValueError
【发布时间】:2024-01-22 14:00:01
【问题描述】:

我正在尝试将用户的 get 输入仅转换为整数,并提供错误检查以确保用户的输入有效。在检查用户是否输入了字符串时,如果用户输入的不是整数,程序应该显示错误。但是,无论我如何构造这个 try/except,它都不会显示错误消息,而是将我弹回到 Visual Studio 编辑器并抛出异常“invalid literal for int() with base 10”。我已经在这个网站和其他网站上进行了搜索和搜索,其他所有遇到此问题的人都可以使用此代码使其正常工作,但由于某种原因,它无法正常工作。有人可以帮我找出问题所在,或者如果有另一种检查整数输入的方法,请指出我的方向。感谢您提供任何帮助,如果此站点上已经存在类似问题,我深表歉意,但我无法找到与我的具体案例有关的问题。我正在使用 Python 3.7 解释器(虽然我已经安装了 3.8,但 VS 还不支持它)。这是我的代码:

    try:
        a = int(input("Input: "))
    except ValueError:
        print(a)

【问题讨论】:

  • 您不是在打印错误消息,您只是在打印他们输入的任何内容。
  • 但这不起作用,因为如果转换失败,则不会分配变量。
  • 这是验证输入的正确方法。如果您从终端窗口而不是 VS 运行脚本,它会起作用吗?
  • 如果用户输入了一个数字,但它不是整数怎么办?这可以接受吗?在这种情况下,您应该使用@gelonida 答案,但将其修改为a = int(float(inp))
  • @Barmar,我从终端尝试过,它成功了。感谢您的反馈!看来我将切换回 PyCharm,因为 Visual Studio 并不真正适合 Python 开发。

标签: python python-3.x try-catch valueerror


【解决方案1】:

您显示的代码是错误的。

如果发生异常,则不会分配a。 为其他人工作的代码可能非常相似但又不同。

这里有一个 try except 的例子,它会提示用户直到有一些有效的输入。 它还打印 python 可执行文件的路径及其版本,以确保这不是版本问题。 IDE 不应忽略 try except 语句。

我从未听说过这样的事情,并假设除了 pycharm 与 Visual Studio 代码之外还有其他一些区别。

import sys
print(sys.executable, sys.version_info)  # for debugging only
while True:
    inp = input("Input: ")
    try:
        a = int(inp)
        break
    except ValueError:
        print("invalid input", inp, ". You should enter a number. Please retry")

print("A is", a)

我不知道您是要强制用户输入正确的数据,还是只想检测错误。 只需根据您的确切需求进行调整

【讨论】:

  • 感谢大家的反馈。为了澄清,我提供的代码只是我用来测试为什么 try/except 不起作用的一个例子。在我的实际代码中,我有一个除外部分打印一个字符串,而不是变量。我尝试了我提供的确切代码(使用字符串而不是打印的)以及您的代码,但都没有奏效。我刚从终端试了一下,效果很好!显然,Visual Studio 在运行 Python 时存在问题(这不是我在尝试运行代码时遇到的唯一问题)。我可能会切换回 PyCharm 进行 Python 编程。谢谢!
  • 始终显示您尝试但失败的准确代码。还请确保完全相同的代码(没有修改一个字符)与 Pycharm 一起使用,而在 Visual Studio Code 中失败。即使是一个不同的角色也可以改变整个行为。我建议您从我的答案中复制粘贴我的代码(不进行修改)以尝试重现问题,并且只有当您无法重现错误时,您才使用您拥有的最小代码段,该代码适用于另一个,而另一个则失败。
  • 请注意,我也略微增强了我的答案。 IDE 不应该对是否捕获异常有任何影响。
最近更新 更多