【问题标题】:ValueError when reading from a file从文件读取时出现ValueError
【发布时间】:2015-03-05 21:59:03
【问题描述】:

我有一个 python 脚本,它从文件 devices.txt 中读取项目,然后填充字典。现在这个文件的结构如下:

uniqueId,RoomLabel,Label,State,Frequency

例如:

1001,lounge,lamp,False,6789

现在当 python 单独读取它时,这很好。但是,当我进一步填充文件时:

1001,lounge,lamp,False,5169,1002,lounge,tv,False,6789

吐出来:

unId = int(value[0])
ValueError: invalid literal for int() with base 10: ''

这是程序此时运行的代码:

with open("devices.txt") as file:
for line in file:
    value = line.rstrip('\n').split(",")
    unId = int(value[0])
    rmLabel = value[1]
    label = value[2]
    state = value[3]
    freq = int(value[4])
    irTable[unId] = rmLabel, label, state, freq

考虑到这一点,我看不到它在哪里找到一个以 10 为底的 int(),我的数学很糟糕,但据我所知,如果它是 10 的底,那就是看到小数点正确吗?

【问题讨论】:

  • 这是因为你的两个项目在同一行。
  • 不:/我已经将第二组放在一行中,但它仍然吐出同样的错误

标签: python python-3.x


【解决方案1】:

错误信息ValueError: invalid literal for int() with base 10: ''的含义如下:

您要求 Python 通过调用 int() 将对象转换为整数。

因为您没有指定基数,所以它假定默认值为 10(十进制)(例如,您可以通过指定基数 16 来告诉它解析十六进制数字:int('ff', 16))。导致此异常的值是''(空字符串)。因此,空字符串'' 不能使用以 10 为基数(或本例中的任何其他基数)转换为整数。

调用int() 的确切代码行打印在异常上方:

unId = int(value[0])

所以你知道value[0] 在某些时候等于''

原因很可能是您的*.csv 文件中有空字段或空行。打印linevalue 看看发生了什么。

这应该可以帮助您找出代码和/或数据中的问题,以及如何读取 Python 异常。但是在你修复了这个错误之后,你应该真正使用内置的 csv 模块来解析 CSV 文件,就像 @Joran Beasley 建议的那样。

【讨论】:

    【解决方案2】:

    它试图将逗号分隔行上的第 0 个值转换为整数(使用基数 10,但基数可能不相关。)此错误很可能意味着实际上位于 0' 的字符串行中的第 th 个位置不是可识别的数字(例如,您的 devices.txt 可能在某处的格式不正确,以至于行以 lounge,lamp,False, ... 而不是数字开头,或者 id 字段在某些时候为空(例如 @ 987654323@)。

    【讨论】:

      【解决方案3】:

      错误信息 ValueError: invalid literal for int() with base 10: '' 表示如下:

      您要求 Python 通过调用 int() 将对象转换为整数。

      解决此问题的一种方法是执行以下操作: 将value 转成字符串,然后像这样使用replace() 方法。

      value = value.replace(' ', '') 
      

      注意:您可以在第一组'' 中插入任何内容。这将用第二组'' 中的任何内容替换它。如果要删除第二组,请务必保留第二组,不要使用任何空格或字符。

      对每个不能转换为整数的单个字符执行此操作。其中包括:!@#$%^&*()_+{}[]":;'?>

      要找出可能无法转换为整数的字符,请执行以下操作:

      print(repr(value))
      

      这将显示您的所有角色。只需对无法转换的任何内容使用替换方法即可。

      希望这会有所帮助:)

      【讨论】:

        猜你喜欢
        • 2021-05-09
        • 1970-01-01
        • 2020-06-22
        • 2016-02-07
        • 2022-08-11
        • 2019-03-27
        • 2012-03-25
        • 2016-10-04
        • 1970-01-01
        相关资源
        最近更新 更多