2016-11-06 17 views
0

作成したモジュールをインポートできません。このモジュールは、インポートする必要のあるモジュールと同じフォルダにあります。私は、モジュールのthatsに取り組んでいますdirecto_etapas.pyと呼ばれ、そこから私はsolvers.pyをインポートする必要があるので、私は行く:同じフォルダからモジュールをインポートできません

import math 
import solvers 

数学モジュールのインポート中に、私はすべてのエラーを得ることはありませんが、私はimport solversとエラーが出るん。私はEnthoughキャノピーを使用してい

"C:\Users\...\Codigos\directo_etapas.py" 
Traceback (most recent call last): 
    File "C:\Users\...\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.5.5.3123.win-x86_64\lib\site-packages\IPython\core\ultratb.py", line 776, in structured_traceback 
    records = _fixed_getinnerframes(etb, context, tb_offset) 
    File "C:\Users\...\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.5.5.3123.win-x86_64\lib\site-packages\IPython\core\ultratb.py", line 230, in wrapped 
    return f(*args, **kwargs) 
    File "C:\Users\...\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.5.5.3123.win-x86_64\lib\site-packages\IPython\core\ultratb.py", line 267, in _fixed_getinnerframes 
    if rname == '<ipython console>' or rname.endswith('<string>'): 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe1 in position 80: ordinal not in range(128) 
ERROR: Internal Python error in the inspect module. 
Below is the traceback from this internal error. 


**Unfortunately, your original traceback can not be constructed.** 

注:

は、私はこのエラーを取得します。

+0

「インポートソルバー」をコメントアウトすると、このエラーは発生しませんか? – sobek

+1

エラーは、あなたの '.py'ファイルにASCII以外の文字(ñ、á、é...)があることを指しているようです。多分?こちらをご覧ください:https://www.python.org/dev/peps/pep-0263/ – BorrajaX

+0

ありがとうございます!出来た。パス名には「á」が含まれていたため、名前を変更して機能しました。 –

答えて

0

@BorrajaXが示すように、あなたが見るトレースバックはおそらく、ASCII以外の文字を含むパス名またはファイル名を扱うためです。 (ASCII以外のパス名の根底にある問題は、Python 3はPython 3のようにUnicodeを一貫してサポートしていないということですが、Canopyの連続したバージョンではこれらがうまく処理されますが、まだまだ不完全です)およびファイル名。

しかし、私があなたの説明を理解していれば、このユニコードの問題は、実際の修正を必要としながら、別の元のエラーに二次的になる可能性があります。 (元のエラーを報告しようとしたときに、Unicodeのエラーが発生したことを示唆している「あなたの元トレースバックを再構築することができません」注意してください。)


あなたの元のエラーがモジュールをインポートするために、それを実現していないような単純なものもそのパスはPythonのsys.pathでなければなりません。これは標準のmathモジュールに常に当てはまるはずなので、いつでもほとんどいつでもインポートできます。しかし(驚くべきことに初心者に)それはではありません。は、実行しているスクリプトを含むディレクトリに当てはまります。私。 directo_etapas.pyを実行しているという理由だけで、同じディレクトリにある他のファイル(例:solvers)をインポートすることはできません。

この問題の「プロフェッショナルグレード」ソリューションは、関連するすべてのモジュールを含む「pythonパッケージ」(ルックアップ)を作成するか、ライブラリモジュールを「インストールする」(solversなど)あなたのPythonディストリビューションに、常にアクセスできるように、mathがあります。しかし、これはあなたが今やりたいことよりもおそらく多くの仕事です。

これが実際に元のエラーの原因だった場合、モジュールのディレクトリがsys.pathであることを確認する2つの簡単な方法があります。

a)sys.pathは通常、現在のディレクトリを意味する空の文字列で始まるため、単純ではありませんが、そのディレクトリから実行していることを確認するだけです。

Canopy GUIでスクリプトを実行している場合は、Canopyユーザーガイドのセクション"Change directory"に記載されているように、「エディタディレクトリへの変更」または「ディレクトリをエディタに同期させたままにする」コマンドを使用できます。それ以外の場合は、Windowsコマンドプロンプトからスクリプトを実行している場合は、スクリプトを実行する前にそのディレクトリにcdと入力してください。

b)より幅広く使用したいが、まだインストール作業を望んでいないモジュールの場合、より堅牢な解決方法は、含まれるパスを環境変数PYTHONPATHに入れることです。詳細については、this articleを参照してください。

(ご希望のディレクトリがsys.pathになっていることを確認するコードを作成し、メインスクリプトが存在するディレクトリを参照してください(__file__を参照)。そのディレクトリを現在の作業ディレクトリにするか、 sys.pathですが、これらのソリューションではちょっとハッキリしています。

+0

それは働いた!問題は、フォルダのパス名に「Hidráulica」という名前が含まれていて文字が問題を引き起こしていたことです。 –

関連する問題