无效的字面量用于int()函数 Python

3

我在Python中得到了“invalid literal for int()”的错误,但是这真的很奇怪,因为字面量是“1”。当然,如果我在IPython中尝试int(“1”)或int(u“1”),我就没有错误,但是在我的代码中,相同的指令会出错。

        try:
            VimsLog().debug("val = %s" % val)
            int(val)
        except Exception, e:
            VimsLog().debug(e)
            VimsLog().debug("I am died")
            return val

在哪里

e=invalid literal for int(): "1"

为了兼容性,我正在使用Python 2.4


2
这个“val”是从哪里来的? - njzk2
2
尝试使用VimsLog().debug("val = %r" % val)。记录了什么? - falsetru
1
“val” 可能有一个字符串表示 “1”,但它不能被转换为整数。int(str(val)) 能行吗? - Danstahr
1
你复制并粘贴了错误信息吗? - Aaron Digulla
1
尝试使用repr(val)dir(val)获取更多信息。 - Aaron Digulla
repr(val)返回u'"1"',如果在控制台中尝试,则会出现错误。我该如何解决这个问题?Val是来自外部的值,我无法控制它。 - Luigi Tiburzi
2个回答

5

repr(val)会返回u'"1"'

这意味着你并没有将1转换,而是试图转换"1"(即带引号的字符串1)。这不是一个有效的整数字面量。

去掉引号:

int(val.strip('"'))

也许可以这样做,但这也会删除字符串内部的引号,这可能会导致无效输入不被注意地通过:"1""2" <- 输入中有人忘记了逗号。我的代码可以检测到这个问题,而你的代码则会处理 12 - Aaron Digulla
好的,那我就采用你的解决方案,非常感谢你的解释! - Luigi Tiburzi

5
我尝试了所有上述解决方案,但都不起作用。 相反,对我而言,它起作用的是:
val = "15.1234"
int(float(str(val)))

结果

>>15

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接