【问题标题】:SyntaxError: Non-ASCII character '\xd1' in file modules/commands.pyc语法错误:文件 modules/commands.pyc 中的非 ASCII 字符“\xd1”
【发布时间】:2013-07-19 22:55:46
【问题描述】:

我有一个 python 文件,[working dir/]modules/commands.py,它只包含以下内容:

def getId():
    return "commands"

然后我有另一个文件,[working dir/]main.py,它使用以下内容:

fpath = "modules/commands.py"
mname = "commands"
imp.load_source(mname, fpath)

在我将getId() 添加到commands.py 后,我在尝试运行main.py 时开始收到以下错误:

SyntaxError: Non-ASCII character '\xd1' in file modules/commands.pyc on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

该错误抱怨非 ascii 字符,但文件中应该没有。是什么导致了错误?

编辑: 如果我删除 .pyc 文件,问题会暂时消失,但下次会出现。

【问题讨论】:

  • help(imp) 说“未记录的函数已过时”,load_source 未记录。有什么理由不使用记录在案的load_module 函数吗?根据错误,load_source 似乎正在加载已编译的 (.pyc) 文件,就好像它是源代码一样,但由于它没有记录在案,这只是一个猜测。
  • 对我来说工作得很好!可能会尝试删除[working dir/]modules/__pycache__
  • @torek 我使用它的唯一原因是它是我第一个在 google 中找到一个很好的例子。我可能会研究 load_module
  • @rnbcoder 我找不到这样的文件/目录
  • 相关,提到了 load_source 的弃用:stackoverflow.com/questions/10533679/…

标签: python encoding character-encoding


【解决方案1】:

(由于似乎没有人想要代表,我会自己写一个答案)

imp 模块中的方法load_source() 已被标记为过时,甚至从 python 3.X 的文档中完全删除。

解决方案是使用来自同一个imp-module 的find_module()load_module()。换成他们之后,它开始完美地工作。

过时的函数在这种行为中似乎有些错误(至少在 Centos 6 上的 python 2.6.6 中)

【讨论】:

    猜你喜欢
    • 2012-10-24
    • 2015-01-06
    • 2014-03-05
    • 2011-09-05
    • 1970-01-01
    • 2017-07-27
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多