【问题标题】:Python: ValueError: invalid literal for int() with base 10: ' 'Python:ValueError:以 10 为基数的 int() 的无效文字:''
【发布时间】: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 有没有办法解决这个问题?
  • 在使用之前检查numsiblingnumcores 的值。 if else 声明应该可以帮助您。
  • 单独转换数字(不在计算中),在 try-except 子句中一一转换。这样,您可以在值为空时设置默认值。
  • 我不明白 if-else 部分应该如何工作:所有变量仍然是 Popen 对象,而不是字符串。

标签: python int popen traceback


【解决方案1】:

numsibling.stdout.readline()numcores.stdout.readline() 字符串之一为空。所以当你尝试用函数int解析它的整数值时,它会返回一个错误。

当传递一个空字符串时,您可能可以使用 default,例如:

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

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

【讨论】:

  • 虽然它们都不是空的,但它们都应该提取一个值。
  • @Klyde 尝试将每个变量存储在一个变量中,然后打印变量并检查它们是否为空。
猜你喜欢
  • 2013-05-14
  • 2017-12-06
  • 2013-07-27
  • 1970-01-01
  • 2013-08-04
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多