解析 EOF,Python 3
Parsing of EOF, Python 3
很抱歉提出明显愚蠢的问题,我远不是专业人士。我很好奇它是怎么发生的,对于下面 Python 3.5 中的代码,我收到 IndexError,
with open('graph.txt') as f:
text = f.read()
for i in range(len(Text)):
if text[i+1] == '>':
*do something*
line 5: if text[i+1] == '>':
IndexError: string index out of range
但是,当我 strip
读取文件时
text = f.read().strip()
编译器很高兴。在任何情况下,我都会点击 EOF,但对于后者,它被解析得很好。
万分感谢!
编辑:对于那些有一天会阅读这些行的人,请不要继续阅读它,因为错误出现在我没有提供的代码中。但是,为了保留一点实用性,请记住 .strip()
函数默认会删除所有尾随空格(即空格和换行符)。这部分是我的问题的原因。干杯!
因为 Text
运行 中的索引从 0
到 len(Text)-1
。同理,range()
运行s从0
到参数减一的输出,这里是len(Text)-1
。因此,最后一次通过循环,if
语句索引 Text[len(Text)-1 + 1] = Text[len(Text)]
,它不存在,导致 IndexError
.
您也许可以按照此 post 的相同思路做一些事情。
我还注意到当你打开文件时你没有告诉它如何打开 open('graph.txt', 'r')
。也许这也是问题的一部分
此外,您还需要确保一直循环到完整长度,因此您需要在 range(0, len(text))
中说
请注意,一种更 Pythonic 的方法是:
for char in Text:
if char == '>':
# do something
如果您的 'do something' 需要访问 'i','char' 出现的索引,那么这将变为:
for i, char in enumerate(Text):
if char == '>':
# do something with i
从您的代码看来,您似乎不想检查第 0 个位置的“>”字符,即 Text[0]。因此:
for i, char in enumerate(Text):
if i > 0 and char == '>':
# do something with i
很抱歉提出明显愚蠢的问题,我远不是专业人士。我很好奇它是怎么发生的,对于下面 Python 3.5 中的代码,我收到 IndexError,
with open('graph.txt') as f:
text = f.read()
for i in range(len(Text)):
if text[i+1] == '>':
*do something*
line 5: if text[i+1] == '>':
IndexError: string index out of range
但是,当我 strip
读取文件时
text = f.read().strip()
编译器很高兴。在任何情况下,我都会点击 EOF,但对于后者,它被解析得很好。
万分感谢!
编辑:对于那些有一天会阅读这些行的人,请不要继续阅读它,因为错误出现在我没有提供的代码中。但是,为了保留一点实用性,请记住 .strip()
函数默认会删除所有尾随空格(即空格和换行符)。这部分是我的问题的原因。干杯!
因为 Text
运行 中的索引从 0
到 len(Text)-1
。同理,range()
运行s从0
到参数减一的输出,这里是len(Text)-1
。因此,最后一次通过循环,if
语句索引 Text[len(Text)-1 + 1] = Text[len(Text)]
,它不存在,导致 IndexError
.
您也许可以按照此 post 的相同思路做一些事情。
我还注意到当你打开文件时你没有告诉它如何打开 open('graph.txt', 'r')
。也许这也是问题的一部分
此外,您还需要确保一直循环到完整长度,因此您需要在 range(0, len(text))
请注意,一种更 Pythonic 的方法是:
for char in Text:
if char == '>':
# do something
如果您的 'do something' 需要访问 'i','char' 出现的索引,那么这将变为:
for i, char in enumerate(Text):
if char == '>':
# do something with i
从您的代码看来,您似乎不想检查第 0 个位置的“>”字符,即 Text[0]。因此:
for i, char in enumerate(Text):
if i > 0 and char == '>':
# do something with i