2017-12-15 14 views
0

스파이더 에서 파이썬 코드를 실행 중이며 아무런 문자열도 관리하지 않습니다.. 하지만 물론 코드에 주석을 달았습니다. (아마도 어딘가에 악센트가있을 것입니다.)UnicodeDecodeError : 'utf-8'코덱에서 바이트를 디코딩 할 수 없습니다. 코드 위치를 모르겠다.

내가 코드를 실행할 때, 저에게 말한다 :

내가 가진 문제는 그냥있는 참 오류가 아나콘다 파이썬 라인을 줘, 그것은 충돌이 줄을 모르겠입니다

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 148: invalid continuation byte

파일, 그건 내 실수가 내 자신의 코드에 어디에 있는지 말해주지 않습니다.

실제로 코드는 완벽하게 작동했습니다. 그럼 내 PC가 추락하고 내가 그것을 재부 팅하고 지금은이 오류가 있지만 아무것도 내 코드에서 변경되지 않았습니다.

이 주제에 대한 모든 도움말은 항상 이상한 문자가있는 문자열에 관한 것이지만 내 코드가 아무 것도 인쇄하지 않으며 문자열 (숫자 행렬 만)을 관리하지 않는다고 주장합니다.

코드가 상당히 길어서 어디에서 오류가 발생했는지 정확히 알기 위해 고심하고 있습니다. 누군가가 그것에 대해 일반적인 생각을 갖고 있는지 알고 싶습니다. (주요 사실은 코드에서 어떤 문자열로도 작동하지 않는다는 것입니다. 여기에있을 수있는 유일한 특수 문자는 주석에있을 것입니다.)

+1

적어도 아나콘다 전화를하십시오. 사용중인 패키지에서 오류가 발생하면 잘못 사용하고 있음을 나타냅니다. –

+0

@MarkRansom 사실 나는 아나콘다 안의 스파이더를 사용하고있다. 그래서 나는 F5를 눌러서 스크립트를 실행한다. (나는 그것이 당신의 질문 이었는지 나는 모른다. 나는 파이썬을 다루는 굉장히 초보자이다.) – StarBucK

+2

당신은 실수가 어디서 왔는지는 말하지 않지만, 파이썬이 ' 코드를 구문 분석하면 (즉, 런타임에 컴파일 타임에 문제가 발생하는 경우), 파일의 148 번 위치에서 오류가 발생한 위치를 알려줍니다. – DSM

답변

1

소스 코드 자체에 오류가있는 것으로 보입니다. 오류 메시지는 오류의 정확한 위치를 지적하는 데별로 유용하지 않습니다. 이 코드 조각 (Python 3)을 사용하여 오류가있는 행을 인쇄 할 수 있습니다.

error_position = 148 
file_position = 0 
with open(source_filename, 'r', encoding='latin1') as f: 
    for line in f: 
     if file_position <= error_position < file_position + len(line): 
      print(line.rstrip('\n').encode('latin1').decode('unicode-escape')) 
      spaces = ' ' * (error_position - file_position) 
      print(spaces, '^', sep='') 
      break 
     file_position += len(line) 

기본값이 아닌 문자를 사용하는 경우 원본 파일에 사용되는 인코딩을 Python에 알려줘야합니다. Python 2의 기본값은 ASCII이며 Python 3의 기본값은 UTF-8입니다. 자세한 내용은 PEP 263를 참조하십시오 다른 것을 위해 당신은 소스 파일의 첫 번째 또는 두 번째 라인, 예컨대 :

# -*- coding: windows-1252 -*- 

에 마법의 주석을 추가 할 수 있습니다.

왜 재부팅 할 때까지 프로그램이 오류를 일으키지 않았는가에 대한 이론이 있습니다. 대화 형 Python 프롬프트에서 작업하고 import을 사용하여 프로그램을로드하는 경우 파일을 저장하고 import을 다시 사용하더라도 프로그램 업데이트가 표시되지 않습니다. 이것은 파이썬이 가져 오기를 캐시하기 때문입니다. How to unimport a python module which is already imported?