解析 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 运行 中的索引从 0len(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