2013-04-29 76 views
1

我在我的python脚本中有以下代码来启动应用程序并获取它的输出。python将字符串“0”转换为浮点数给出错误

这种输出的一个例子是“证实:0

现在我只是想知道电话号码,在这种情况下为零,但通常这个数量是浮动,就像0.005464

当我运行这段代码告诉我它不能将“0”转换为浮点数。我究竟做错了什么?

这是错误,现在我得到: ValueError异常:无法将字符串转换为float:“0”

cmd = subprocess.Popen('/Applications/Electrum.app/Contents/MacOS/Electrum getbalance', shell=True, stdout=subprocess.PIPE) 
for line in cmd.stdout: 
    if "confirmed" in line: 
    a,b=line.split(': ',1) 
    if float(b)>0: 
     print "Positive amount" 
    else: 
     print "Empty" 
+1

您能够精确地复制/粘贴回溯吗? – mgilson 2013-04-29 13:59:27

+0

回溯(最近通话最后一个): 文件 “maken.py”,行81,在 检查=浮动(B) ValueError异常:无法将字符串转换为float: “0” – user2133342 2013-04-29 14:00:45

+1

做'印刷再版(行) ''之后'for'并粘贴它 – 2013-04-29 14:01:44

回答

4

根据你有例外,包含在b值不0,但"0" (包括引号),因此不能直接转换为浮点数。您需要先删除引号,例如与float(b.strip('"'))

如可以在下面的例子中可以看出,除了描述不加引号,所以他们一定是原始字符串的一部分:

>>> float('"0"') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: could not convert string to float: "0" 
>>> float('a') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: could not convert string to float: a 
+0

刚刚尝试过,但它只删除了1个报价似乎:Traceback(最近调用最后一个): 文件“maken.py”,第81行,在 if float(b.strip '''))> 0: ValueError:无效文字float():0“ – user2133342 2013-04-29 14:07:06

+1

@ user2133342 - 如果有空格,在'”它。你可以尝试:'if float(b.strip(''\ n'))'。再次想到,你的行可能以一个尾随的换行符结尾,所以你需要去掉这些行。可能更容易替换引号:'float(b.replace(''',''))' – mgilson 2013-04-29 14:08:08

+0

@ user2133342:也许你在最后有一些空格,试试'b.strip()。strip('“ ').'。按照Jakub的建议,打印'repr(line)'会显示你的字符串到底是什么。 – interjay 2013-04-29 14:08:24

-1

我已经测试的代码,发现分裂( ':',1)结果包含字符串

>>> line = "1: 456: confirmed" 
>>> "confirmed" in line 
True 
>>> a,b=line.split(': ', 1) 
>>> a 
'1' 
>>> b 
'456: confirmed' 
+0

您测试过的行包含多个':',一个OP只包含一个。 – interjay 2013-04-29 14:09:42

相关问题