Python 从字符串中删除非数字字符并对其使用int()函数后,会发生错误

Python 从字符串中删除非数字字符并对其使用int()函数后,会发生错误,python,string,file,int,Python,String,File,Int,具体行是 b = int(a.translate(None, "\t<,")) 好像我给它的字符串由于某种原因是空的。我做错什么了吗?(如果有任何变化,我也会从txt文件中读取字符串) 以下是源代码:您可以使用过滤器: b = int(filter(lambda character: character.isdigit(), a)) 对于Python 3: b = int(''.join(filter(lambda character: character.isdigit(), a))

具体行是

b = int(a.translate(None, "\t<,"))
好像我给它的字符串由于某种原因是空的。我做错什么了吗?(如果有任何变化,我也会从txt文件中读取字符串)


以下是源代码:

您可以使用
过滤器

b = int(filter(lambda character: character.isdigit(), a))
对于Python 3:

b = int(''.join(filter(lambda character: character.isdigit(), a)))

问题是,除了您认为得到的所有字符串外,您还得到了一些仅由“\t”组成的字符串,然后通过字符串转换将其转换为空字符串

在测试空字符串时,向if测试添加一个附加子句可以解决以下问题:

if (i != " ") and (i != "") and (i != "\t"):
    (...)
而不是:

if i != " " and i != "":
    (...)

也可以考虑用括号表示清楚……/P>你使用的是什么版本的Python?这在2.6.6中对我有效。我无法复制这一点。您能提供一个完整的、可运行的示例来演示这个问题吗?这在Python3中出现了一个类似的错误。我使用的是Python 2.5.5,我刚刚意识到它不支持“None”作为translate中的参数。然而,我尝试了其他几种不同的方法,比如使用replace函数,我得到了相同的错误,再次检查

a
实际上就是您认为的字符串。这是所有这些方法都不起作用的唯一合理解释。可能没关系,但是
translate
更有效。更新。这应该比正则表达式快一点。@Blender:
filter(str.isdigit,a)
看起来更好,imho.@hop-看起来更好,但会被unicode阻塞。是另一种选择,但它并不比lambda好多少。使用
int('''.join(如果c.isdigit()中的c代表c))
?+1来发现问题如何-1对于尴尬的解决方案。你可以通过执行
i=”“.join(i.split()
删除所有空格,然后只要测试
如果i:
。顺便说一句,
i
对于文本值来说是一个可笑的名字。是的,我在发布几小时后就发现了这一点,谢谢你的帮助!这是我使用Python的第一天,仍然觉得很奇怪。
if i != " " and i != "":
    (...)