Python:ValueError:基数为10的int()的文本无效:“”

Python:ValueError:基数为10的int()的文本无效:“”,python,int,popen,traceback,Python,Int,Popen,Traceback,我在运行PythonV2.6的vi编辑器中得到了这个错误值error,我无法更新它。经过大量的研究和测试,我弄不明白。用当前代码是否可以指定一个10的基值?有什么改变和重组的建议吗?如果有人遇到过类似的问题,并且有自己的解决方法,我很想知道,以供将来参考 这是我的密码: numcpu = sub.Popen("($(cat /proc/cpuinfo | grep 'physical id' | awk '{print $NF}' | sort | uniq | wc -l))", sh

我在运行PythonV2.6的vi编辑器中得到了这个错误值error,我无法更新它。经过大量的研究和测试,我弄不明白。用当前代码是否可以指定一个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: ''
其中一个字符串Numsiling.stdout.readline或numcores.stdout.readline为空。因此,当您试图用int函数解析它的整数值时,它会返回一个错误

当传递空字符串时,您可能会使用默认值,例如:

int(numsibling.stdout.readline() or '0')

这样,即使变量为空,也会有0来代替错误。

您的输入是空字符串:无论使用什么基,都不能将其转换为整数。@是否有办法解决此问题?在使用NumSilling和numcores之前,请检查它们的值。if-else语句应该可以帮助您。在计算中不单独转换数字,在try-except子句中逐个转换。这样,当值为空时,可以设置默认值。我看不出if-else部分应该如何工作:所有变量仍然是Popen对象,而不是字符串。但它们都不是空的,它们都应该提取一个值。@Klyde尝试将每个变量存储在一个变量中,然后打印变量并检查它们是否为空。