2013-01-22 1 views
2

python manual이 SQLite와의 인터페이싱을 제공하는 예제를 따르려고합니다. 코드의 첫 번째 라인이 제대로 작동하지 않을 것 같다 : 대신이 사는 곳의 호출 스크립트 디렉토리에서 파이썬의 날짜를 가져 오기 위해 노력하고 아래의 추적에서 본 python의 sqlite3 모듈이 내 프로젝트 디렉토리에서 datetime을 가져 오려고합니까?

import sqlite3 

그래서, 파이썬의 sqlite3를 모듈을 수입하려고합니다. 나는 이유를 알 수 없다. 내가 뭘 놓치고 있니? 그것은 날짜 내장 모듈과 이름이 같은 원인

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

그냥, datetime.py 이외의 다른 /home/brian/dev/py/datetime.py 모듈 이름을 바꿉니다.

표준 라이브러리 또는 내장 모듈 이름과 같은 이름으로 모듈 이름을 지정하지 마십시오.

+1

감사합니다 ... 나는 그 실수를 다시하지 않을 것입니다. – mrteachman

2

조금 더 자세하게 설명하면, datetime이라는 파이썬 내장 모듈이 있습니다.이 모듈은 관리에 사용됩니다.

이라는 모듈에 해당하는 datetime.py이라는 파일을 만들었습니다. sqlite은 파이썬 내장형 datetime 모듈을 사용하려고하기 때문에 가져옵니다. 그러나 같은 디렉토리에 같은 이름의 파일을 생성했다는 사실은 파이썬의 우선 순위 지정 규칙이 내장 된 파일을 통해이를 선택한다는 것을 의미합니다.

비유하자면, 작업 디렉토리에 sqlite3.py 파일을 만든 경우 import sqlite3은 내장 모듈 대신 해당 모듈을 제공합니다.

이야기의 도덕 : 내장 된 이름을 숨기지 마십시오.

+1

유례를 가져 주셔서 감사합니다! – mrteachman