2016-07-01 2 views
0

분명히 어리석은 질문에 대해 사과드립니다. 전 프로가 아닙니다. 나는 파일의 읽기를 strip 그러나 EOF, Python 3의 구문 분석

line 5: if text[i+1] == '>':
IndexError: string index out of range

with open('graph.txt') as f: 
    text = f.read() 

for i in range(len(Text)): 
    if text[i+1] == '>': 
     *do something* 

,

text = f.read().strip()

컴파일러는 행복, 파이썬 내가 IndexError를받을 바로 아래 3.5의 코드, 그 그런 일이 얼마나 궁금했다. 어떤 시나리오에서든, 나는 EOF를 쳤지 만, 후자는 잘 분석된다.

감사합니다.

EDIT : 언젠가이 줄을 읽는 사람들을 위해 내가 제시하지 않은 코드에 버그가 있었기 때문에 더 이상 읽지 마십시오. 그러나 약간의 유익을 남기기 위해서는 .strip() 함수가 기본적으로 뒤 공백 (예 : 공백과 개행)을 모두 줄이는 것을 기억하십시오. 그것은 부분적으로 내 문제의 이유였습니다. 건배!

+1

'i' 색인은 문자열의 마지막 문자까지갑니다. 당신은'Text [i + 1]'에 접근하려고 시도합니다. 따라서'IndexError'. – khelwood

+1

사이트에 오신 것을 환영합니다! 자세한 정보와 코드에 대한 행운을 보려면 [둘러보기] (https://stackoverflow.com/tour)를 확인하십시오! – cxw

+0

감사합니다. 여기에있는 것이 좋으며 모든 것이 최선입니다! –

답변

2

때문에 0len(Text)-1-Text 실행에 인덱스. 마찬가지로 range()의 출력은 0에서 매개 변수 빼기 1 (여기서는 len(Text)-1)까지 실행됩니다. 따라서 루프를 마지막으로 사용한 if 문 인덱스는 Text[len(Text)-1 + 1] = Text[len(Text)]이며 존재하지 않으므로 IndexError이됩니다.

+0

답변 해 주셔서 감사합니다. 하지만 제 질문은 오히려 왜 내가 IndexError를 얻지 못하는 이유였습니다. –

+1

@Ivan_G 당신은 그 행동을 설명하기에 충분한 코드를 게시하지 않았습니다. 그것은 나머지 코드가 말하는 것과 파일에 들어있는 내용에 달려 있습니다. – khelwood

+0

아래에 무엇을 넣을 지 상관없이 동작이 유지됩니다 (단지 count + = 1로 말하면됩니다). 그리고 내 파일에는 단 두 줄이 포함되어 있습니다. –

0

아마도이 post의 동일한 줄을 따라 뭔가를 할 수 있습니다.

또한 파일을 열었을 때 알지 못했지만 open('graph.txt', 'r')을 여는 방법을 알려주지 않았습니다. 어쩌면 그

또한 거입니다

당신이 루프까지 전체 길이에있는 모든 방법은 당신이 range(0, len(text))

+0

안녕하세요 @brodie, 사람들이 물건을 만들 수있는 정확한 대답을 갖는 것이 좋습니다. 조언을 원할 경우 주석은 매우 유용합니다. –

+1

@ 앤디 편집 및 조언 Andy에게 감사드립니다. 스택 오버 플로우 규칙에 따라 50 개의 평판이 나올 때까지는 주석을 달 수 없습니다. 다른 현명한 나는 가질 것입니다. 그래도 고마워. – Brodie

1

것은, 더 파이썬주의에 말할 필요가 있도록 있는지 확인하려면뿐만 아니라 문제의 일부입니다 이 일의 방식, 즉, 그것은 불가능 '오프에 의해 하나의'문자열 색인 오류의 이러한 종류를 만들 수 있습니다 :

for char in Text: 
    if char == '>': 
     # do something 

경우 'i'를 액세스해야 '뭔가 할', 인덱스 곳 '문자 '이 발생하면 다음이됩니다.

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 
+0

조나단, 그런 조명 답변을 주셔서 대단히 감사합니다. Pythonic 방식은 우아한 것입니다. –

+1

당신은 환영합니다, 나는 파이썬 땅에서도 내 시간을 즐기고 있습니다. Upvotes는 감사를 표현할 수있는 좋은 방법입니다! :-) –