0

我有:

raw_matrix.append([])
for as_string in ' '.split(line):
    if as_string:
        print('as_string: #' + as_string + '#')
        raw_matrix[-1].append(int(as_string))

这将产生输出:

as_string: # #
Traceback (most recent call last):
  File "product_of_four", line 27, in <module>
    raw_matrix[-1].append(int(as_string))
ValueError: invalid literal for int() with base 10: ''

raw_matrix 是一个 20x20 的数组,由由空格分隔的两位数(十进制)数字组成。

如果我没看错的话, as_string 正在评估为 ' ' 或 '',并且我得到一个异常作为 as_string 不可解析的副作用,因为它不包含 int() 可解析的数字字符串.

如何更改内容以便 Python 2.x (3.x) 解析一串两位整数,而不是尝试将不可解析的字符串解析为整数?

谢谢,

4

4 回答 4

6

该行:

for as_string in ' '.split(line):

这里很可疑。您在' 'delimiter 上拆分字符串line,很可能返回 list [' ']。请记住,字符串只有在为(0 个字符)时才会评估为 False-y 值。字符串' '不为空(只有一个字符)。

您可能想做类似的事情:

for as_string in line.split():
    ...

它将line在连续空白的运行中分裂。

于 2013-05-23T18:00:26.867 回答
6

您正在使用错误的方式拆分;分割线,而不是' '空间:

for as_string in line.split(' '):

通过line分隔符分隔空格字符,您总是会以 . 结尾[' '],而不是空字符串:

>>> ' '.split('10 20 30')
[' ']

(例外是一个空分隔符,不允许,并且在 上拆分' ',这会给你两个空字符串)。结果中唯一的元素' ', 是一个非空字符串,因此在布尔上下文中为 True 。

至于错误消息,int()忽略前导和尾随空格。剩下的是一个空字符串:

>>> int(' ')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''

您甚至可能想省略' '参数 wen split 并仅在可变宽度空白处进行拆分:

for as_string in line.split():

将第一个参数设置为默认值,None. Usingstr.split()还会忽略任何前导和尾随空格,在从文件中读取行时总是很方便,其中包括换行符:

>>> '  10          20\t30\n'.split()
['10', '20', '30']

从文档中:

如果sep未指定或 is None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随空格,则结果将在开头或结尾不包含空字符串。因此,使用分隔符拆分空字符串或仅包含空格的字符串会None返回[].

于 2013-05-23T18:00:37.853 回答
3

你的split陈述结构不正确;它应该是line.split(' ')。它的编写方式,你试图用任何内容来划分一个空间line,这显然只是要返回空间。不能将其评估为整数。

于 2013-05-23T18:01:25.607 回答
2

' '计算结果为 True 因为它不是一个空字符串(那里有一个空格)。

您的代码的问题for as_string in ' '.split(line)实际上应该是for as_string in ' '.split(line)

于 2013-05-23T18:02:57.757 回答