1

copy.py在当前目录中命名了一个脚本,其内容如下:

#!/usr/bin/env python3

print("Ahoy, matey!")

如果我运行 Python 交互式 shell 并执行一些引发异常的操作(例如,引用不存在的变量),令我惊讶的是,句子“Ahoy,matey!” 被打印出来了。

当我将copy.py脚本重命名为其他任何名称时,例如script.py,它的行为就不再那样了。我的问题是,为什么交互式 shell 必须调用copy.py错误?这种行为是否预期和/或记录在某处?

谢谢!

4

1 回答 1

1

Python导入模块时,模块搜索路径顺序为:

  • 包含输入脚本的目录(或当前目录)。
  • PYTHONPATH(目录名称列表,与 shell 变量 PATH 具有相同的语法)。
  • 安装相关的默认值。

现在,当引发异常时,Python 会运行特定代码。任何尝试导入copyPython 模块的代码都将导入您的模块并在其中打印字符串。这就是为什么您不应该使用同时是标准 Python 模块名称的名称。

于 2013-09-04T08:32:17.473 回答