9

我无法从 python 脚本导入日期时间,但我可以从终端命令行导入。

1)import datetime
2)From datetime import datetime

month = datetime.datetime.now().strftime("%B")
print month

这些代码行在命令行中一一输入时起作用有什么想法吗?

我在mac上运行2.7

4

4 回答 4

19

您将脚本 datetime.py命名为,位于/Users/ripple/Dropbox/Python/datetime.py。这是导入而不是标准库模块,因为主脚本的目录是 Python 查找导入的第一个位置。

您不能为您的脚本提供与您尝试导入的模块相同的名称。重命名您的脚本。确保您还删除了/Users/ripple/Dropbox/Python/datetime.pyc.

于 2013-04-12T15:40:32.717 回答
17

这是正在发生的事情:

  1. 你命名你的文件datetime.py进行测试
  2. 然后你在import datetime里面写,因为那是你想尝试的模块

运行文件时会发生什么:

  1. Python 首先在本地目录中查找名为datetime
  2. 由于 Python 只找到你的原始文件,它会创建一个名为 的空模块文件datetime.pyc,因为它希望你在它的基础上进行构建

幸运的是,StackOverflow 的好心人让您意识到了这个命名错误,并且您将datetime.py文件重命名为其他内容。但是令人困惑的是,您仍然会遇到错误,并且挫败感会慢慢积聚...

解决方案:

  1. 始终确保您的文件名不等于您要导入的任何 Python 模块
  2. 如果您仍然忘记,请确保删除或重命名本地.py脚本本地.pyc文件。这应该可以解决您的问题。:)

这是一个常见错误的原因是人们喜欢在编程时测试东西。当他们这样做时,大多数人的自然倾向是制作一个与他们想要测试的东西同名的脚本。然而,这是大多数 Python 开发人员遇到的第一个问题。如果那些设计 Python 的酷人在制作他们的系统之前阅读了 Donald Norman,这永远不会成为问题。但事实上,我们只需要在命名文件之前调整 Python 模块系统的工作方式即可。注意:Python 模块系统以这种方式工作仍有一些原因,但这并不妨碍它对初学者造成混淆。

于 2018-05-13T12:46:56.890 回答
1

您的第二行是覆盖 python 在以后的代码中理解“日期时间”一词的含义。您应该使用

import datetime                 # the complete module
month = datetime.datetime.now().strftime("%B")

或者

from datetime import datetime   # one part of the main module
month = datetime.now().strftime("%B")
于 2013-04-12T16:08:24.847 回答
1

在保存脚本时,请确保给它指定不同的名称(日期时间除外)并将其保存在 c:/Python34/Scripts 中;我相信这会奏效。

于 2015-07-30T19:00:57.890 回答