2017-12-15 6 views
0

スパイダーでPythonコードを実行しています何も印刷されず、。しかし、私はもちろん私のコード(おそらくどこかにアクセントがある)にコメントがあります。UnicodeDecodeError: 'utf-8'コーデックはバイトをデコードできません:しかし、コードのどこにはわからない

私は、コードを実行したい場合には、それは私に語った:

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

私が持っている問題は、私はちょうど実際にエラーが私にアナコンダパイソンの行を与え、それがクラッシュしたライン上に知らないということです私のミスが自分のコードのどこにあるのか教えてくれません。

さらに、実際にコードは完璧に機能しました。その後、私のPCがクラッシュし、私はそれを再起動し、今私はこのエラーがありますが、これらの間で私のコードで変更されたものはありません。

このトピックに関するヘルプは、常に奇妙な文字を含む文字列に関するものですが、私のコードでは何も印刷されず、文字列(数値の行列のみ)も管理しないことを主張しています。

コードはかなり長く、私はそれが失敗した場所を正確に特定するのに苦労しています。誰かがそれについての一般的な考えを持っているかどうかを最初に知りたいのです(私のコードでは、ここにある特別な文字だけがコメントの中にあります)

+1

少なくとも、アナコンダの呼び方を教えてください。使用しているパッケージでエラーが発生している場合は、間違って使用していることを示します。 –

+0

@MarkRansom実際には私はアナコンダの内部にスパイダーを使用しています。だから私はちょうどスクリプトを実行するためにF5を押す(私はそれがあなたの質問だったかどうか、私は非常にPythonの初心者です) – 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です。何か他のもののためには、例えば、ソース・ファイルの1行目または2行目にマジックコメントを追加することができます完全な詳細については:

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

PEP 263を参照してください。

あなたのプログラムがリブートされるまでエラーが発生しなかった理由は、私には理論があります。対話的なPythonプロンプトで作業していて、importを使用してプログラムを読み込んだ場合、ファイルを保存してimportを再度使用してもプログラムの更新は見られません。これは、Pythonがインポートをキャッシュするためです。 How to unimport a python module which is already imported?

関連する問題