2

我正在尝试遵循python 手册提供的与 SQLite 交互的示例。第一行代码似乎无法正常工作:

import sqlite3

因此,尝试导入 python 的 sqlite3 模块是试图从调用脚本目录而不是它所在的任何位置导入 python 的日期时间,如下面的回溯所示。我不知道为什么。我错过了什么?

Traceback (most recent call last):
  File "sqlite_test.py", line 3, in <module>
    import sqlite3
  File "/usr/lib/python2.7/sqlite3/__init__.py", line 24, in <module>
    from dbapi2 import *
  File "/usr/lib/python2.7/sqlite3/dbapi2.py", line 24, in <module>
    import datetime
  File "/home/brian/dev/py/datetime.py", line 3, in <module>
    now = datetime.now()
AttributeError: 'module' object has no attribute 'now'
4

2 回答 2

4

只需将/home/brian/dev/py/datetime.py模块重命名为 以外datetime.py的名称,因为它与 datetime 内置模块具有相同的名称。

请避免使用与标准库或内置模块名称相同的名称来命名您的模块。

于 2013-01-22T20:33:00.883 回答
2

更详细一点,有一个名为 的 Python 内置模块datetime,用于管理——嗯,你知道的。

您已经创建了一个名为 的文件datetime.py,它对应于一个名为datetime. 由于sqlite要使用 Python 内置datetime模块,它会导入它——但是您在同一目录中创建了一个具有相同名称的文件这一事实意味着 Python 的优先级规则将选择它而不是内置模块。

打个比方,如果您sqlite3.py在工作目录中创建了一个文件,import sqlite3则会为您提供该模块而不是内置模块。

故事的寓意:不要隐藏内置名称。

于 2013-01-22T20:36:54.513 回答