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

もう少し詳しく説明するとdatetime、を管理するために使用される、と呼ばれるPython組み込みモジュールがあります。

datetime.pyと呼ばれるモジュールに対応する、と呼ばれるファイルを作成しましたdatetimesqlitePython組み込みモジュールを使用したいのでdatetime、それをインポートしますが、同じディレクトリに同じ名前のファイルを作成したという事実は、Pythonの優先順位付けルールが組み込みモジュールよりもそれを選択することを意味します。

例えとして、sqlite3.py作業ディレクトリにファイルを作成した場合import sqlite3、組み込みのモジュールではなく、そのモジュールが提供されます。

話の教訓:組み込みの名前を隠さないでください。

于 2013-01-22T20:36:54.513 に答える