【问题标题】:Issue with trying to convert an object to type int in python尝试在 python 中将对象转换为 int 类型的问题
【发布时间】:2018-08-03 08:06:24
【问题描述】:

我正在关注https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00sc-introduction-to-computer-science-and-programming-spring-2011/unit-2/lecture-10-hashing-and-classes/MIT6_00SCS11_lec10.pdf 的讲座,我正在查看函数 readVal 中最后一页的代码

我正在尝试运行以下代码

val=input('type an int: ')
try:
    val=int(val)
    print(val)
except ValueError:
    print('not an int')

现在如果我输入一个整数说 2 一切都很好,它会打印 2。但是,如果我输入一个浮点数说 2.0 或字符串“2”,它会引发异常并打印语句“not an int”,我发现令人困惑的是,当 val 为 2.0 或 '2' 时,它无法将其转换为适当的类型,因为如果我运行这段代码

val = '2'
val = int(val) 
print(val) 

然后我正确地得到 2 没有任何问题。为什么会这样?我非常感谢任何帮助,因为我渴望完全理解我看到的每一段代码。谢谢!

【问题讨论】:

  • 当您输入“2”时,这意味着您在转换为 int 之前的 val 等于“2”。它不是整数。

标签: python string error-handling floating-point int


【解决方案1】:

这是你正在做的两件不同的事情。 input() 返回一个字符串。这意味着如果您输入2.0,它将返回"2.0"。 Python 不支持这种类型的转换。

在您的第二个示例中,您直接将变量设置为浮点或字符串,python 能够自动将其转换为整数。

【讨论】:

  • 谢谢我在转换它之前尝试 type(val) 并看到它是一个字符串之后发现了它!
【解决方案2】:

input 函数产生字符串类型的值。如果您将 2 放入您的 input,那么您将获得 2 作为要转换为 int 的字符串。但是如果你输入'2',那么你会得到一个字符串'2',它不能再转换为int了。

看看这里:https://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/io.html#numbers-and-strings-of-digits

【讨论】:

    【解决方案3】:

    val='2.0' 打印 "not an int. it's a float"

    val='4' 没问题

    val='4a' 打印 "not an int. not a float either"

    val="'4a"' 打印 "not an int. not a float either" 因为它只投射一次

    val=input('type an int: ')
    try:
        val=int(val)
        print(val)
    except ValueError:
        print('not an int')
        try:
            val=float(val)
            print("it's a float")
        except ValueError:
            print("not a float either")
    

    int() 函数无法转换给定的字符串 (Documentation)

    【讨论】:

      【解决方案4】:

      但是,如果我输入一个浮点数,比如 2.0

      如果你在输入提示符下输入 2.0,python 得到的是"2.0"——一个由字符“2”、“.”组成的字符串。和“0”,它与文字浮点数2.0不同。

      或字符串'2'

      同上,如果你在输入提示符下输入'2',python得到的是字符串"'2'"——即字符“'”、“2”和“'”。

      "2.0""'2'" 都不是整数的有效字符串表示形式,因此将它们传递给 int() 确实会引发 ValueError。如果您绝对坚持让用户输入明显无效的值并试图理解它们,那么您将必须自己清理用户输入,然后再将它们传递给int()

      【讨论】:

        猜你喜欢
        • 2021-01-27
        • 2019-06-24
        • 1970-01-01
        • 1970-01-01
        • 2019-12-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-20
        相关资源
        最近更新 更多