为什么我在解析时收到此错误?

时间:2016-02-27 11:27:01

标签: python

我正在阅读文本文件并将其转换为python词典:

使用labelword文件看起来像这样:

20001   World Economies

20002   Politics

20004   Internet Law

20005   Philipines Elections

20006   Israel Politics

20007   Science

这是读取文件和创建字典的代码:

def get_pair(line):
  key, sep, value = line.strip().partition("\t")
  return int(key), value


with open("mapped.txt") as fd:    
           d = dict(get_pair(line) for line in fd)
print(d)

我打印d的内容时收到{}。 此外,我收到此错误:

Traceback (most recent call last):
  File "predicter.py", line 23, in <module>
    d = dict(get_pair(line) for line in fd)
  File "predicter.py", line 23, in <genexpr>
    d = dict(get_pair(line) for line in fd)
  File "predicter.py", line 19, in get_pair
    return int(key), value
ValueError: invalid literal for int() with base 10: ''

这是什么意思?我确实在文件中有内容,我不知道为什么它没有被阅读。

1 个答案:

答案 0 :(得分:3)

这意味着key为空,这反过来意味着您在开头或空行处有一行\t标签:

>>> '\tScience'.partition('\t')
>>> ''.partition('\t')
('', '', '')

我的猜测是后者;你可以跳过生成器表达式中的这些行:

d = dict(get_pair(line) for line in fd if '\t' in line.strip())

因为line.strip()返回没有前导和尾随空格的行,所以在开头只有一个制表符的空行或行会导致字符串中没有制表符。这不会处理所有案例,但您也可以删除传递给get_pair()的值:

d = dict(get_pair(line.strip()) for line in fd if '\t' in line.strip())