2016-11-06 84 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”的á,以至于字符造成了麻烦。 –