2016-11-06 83 views
0

導入我創建的模塊時遇到問題。該模塊與我需要導入它的模塊位於相同的文件夾中。我的工作稱爲directo_etapas.py模塊多數民衆贊成,並從那裏我需要進口solvers.py,所以我去:從同一文件夾導入模塊時遇到問題

import math 
import solvers 

在導入數學模塊我沒有得到任何錯誤,但我得到一個錯誤與import solvers

我得到這個錯誤:

"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.** 

請注意,我使用Enthough雨棚。

+0

當你註釋掉'import solvers'時,這個錯誤不會發生嗎? – sobek

+1

錯誤似乎指向在'.py'文件中有非ascii字符(ñ,á,é...)?也許?看看這裏:https://www.python.org/dev/peps/pep-0263/ – BorrajaX

+0

謝謝!有效。路徑名包含一個「á」,所以我重命名它,它的工作。 –

回答

0

您看到的回溯可能是由於@BorrajaX指示使用包含非ASCII字符的路徑名或文件名而引起的。 (非ASCII路徑名的根本問題是,Python 2不像Python 3一樣支持unicode; Canopy的連續版本處理這些更好,但仍不完美。)目前,最簡單的解決方案是僅使用ASCII路徑名和文件名。

但是,如果我理解你的描述,這個unicode問題,雖然真實並需要修復,但可能是次要的不同的原始錯誤。 (注意:「你原來的回溯無法重建」,暗示在試圖報原來的錯誤發生unicode的錯誤。)


你原來的錯誤可以簡單到沒有意識到的是,爲了導入模塊,它的路徑必須在python的sys.path上。標準math模塊應始終如此,所以您可以隨時導入它。但是(對於初學者來說)令人驚訝的是而不是通常包含您正在運行的腳本的目錄是真的。即僅僅因爲您正在運行directo_etapas.py並不意味着可以導入同一目錄中的其他文件(例如solvers)。

爲了記錄,這個問題的「專業級」解決方案是創建一個包含所有相關模塊的「python包」(查看它),或者「安裝」您的庫模塊(例如solvers)到你的python發行版中,這樣它們總是和math一樣容易訪問。但是,這些工作可能比你現在要做的還要多。

如果這確實是原始錯誤的來源,那麼有兩種簡單的方法可以確保您的模塊的目錄位於sys.path

a)最簡單的,雖然不太穩健,但確保您從該目錄運行,因爲sys.path通常以空字符串開始,即當前目錄。

如果您在Canopy GUI中運行腳本,那麼您可以按照Canopy用戶指南部分"Change directory"中所述的「更改編輯器目錄」或「保持目錄同步到編輯器」命令執行此操作。否則,如果您在運行腳本之前從Windows命令提示符運行腳本,則只需cd即可。

b)對於您希望更廣泛使用但尚未安裝的模塊,一個更強大的解決方案是將其包含的路徑放入PYTHONPATH環境變量中。欲瞭解更多信息,請參閱this article。 (您也可以通過查找主腳本所在的目錄(請參閱__file__),編寫代碼以確保所需的目錄位於sys.path上,然後將其作爲當前工作目錄或將其插入然而這些解決方案的味道有點不好意思)

+0

它的工作!問題在於該文件夾的路徑名包含名爲「Hidráulica」的á,以至於字符造成了麻煩。 –