【发布时间】:2015-10-15 07:52:43
【问题描述】:
我在运行 python v2.6 的 vi 编辑器中收到此错误 ValueError,我无法更新它。经过大量的研究和测试,我无法弄清楚。无论如何用这个当前代码分配一个基值10?有什么改变和重组的建议吗?如果有人遇到过类似的问题并且有解决方法,我很想知道以供将来参考。
这是我的代码:
numcpu = sub.Popen("($(cat /proc/cpuinfo | grep 'physical id' | awk '{print $NF}' | sort | uniq | wc -l))", shell=True, stdout=sub.PIPE, stderr=sub.PIPE)
numcores = sub.Popen("($(cat /proc/cpuinfo | grep 'cpu cores' | awk '{print $NF}' | sort | uniq | wc -l))", shell=True, stdout=sub.PIPE, stderr=sub.PIPE)
numsibling = sub.Popen("($(cat /proc/cpuinfo | grep 'siblings' | awk '{print $NF}' | sort | uniq | wc -l))", shell=True, stdout=sub.PIPE, stderr=sub.PIPE)
numthreads = int(numsibling.stdout.readline())/int(numcores.stdout.readline())
if numsibling == 0 :
maxcpuload = int(numcpu) * int(numcores)
else:
maxcpuload = ((int(numcpu) * int(numcores)+ int(numsibling))/2 )
我的错误:
Traceback (most recent call last):
File "./cputool", line 46, in <module>
cputool()
File "./cputool", line 31, in cputool
numthreads = int(numsibling.stdout.readline())/int(numcores.stdout.readline())
ValueError: invalid literal for int() with base 10: ''
【问题讨论】:
-
你的输入是一个空字符串:不管你用什么基数,都不能转成整数。
-
@Evert 有没有办法解决这个问题?
-
在使用之前检查
numsibling和numcores的值。if else声明应该可以帮助您。 -
单独转换数字(不在计算中),在 try-except 子句中一一转换。这样,您可以在值为空时设置默认值。
-
我不明白 if-else 部分应该如何工作:所有变量仍然是 Popen 对象,而不是字符串。
标签: python int popen traceback