AttributeError при использовании "import dateutil" и "dateutil.parser.parse()", но при использовании "from dateutil import parser" нет проблем,
Я играл с dateutil
module в Python 2.7.3. Я просто хотел использовать:
import dateutil
dateutil.parser.parse("01-02-2013")
Но у меня есть ошибка:
AttributeError: 'module' object has no attribute 'parser'
Я проверил, какие атрибуты dateutil
имеет:
print dir(dateutil)
# output: ['__author__', '__builtins__', '__doc__', '__file__', '__license__',
# '__name__', '__package__', '__path__', '__version__']
Дело в том, что когда я пытаюсь импортировать parser
из dateutil
напрямую, он, кажется, существует:
from dateutil import parser
print parser.parse("01-02-2013")
# output: 2013-01-02 00:00:00
После from dateutil import parser
, parser
также волшебным образом появился в импортированном dateutil
:
print dir(dateutil)
# output: ['__author__', '__builtins__', '__doc__', '__file__', '__license__',
# '__name__', '__package__', '__path__', '__version__', 'parser',
# 'relativedelta', 'tz']
Обратите внимание, что в этом списке все еще отсутствуют некоторые другие атрибуты (например, rrule
).
Кто-нибудь знает, что происходит?
Ответы
Ответ 1
Вы не импортировали dateutil.parser
. Вы можете это увидеть, но вам нужно как-то импортировать его.
>>> import dateutil.parser
>>> dateutil.parser.parse("01-02-2013")
datetime.datetime(2013, 1, 2, 0, 0)
Это потому, что parser.py
является модулем в пакете dateutil
. Это отдельный файл в структуре папок.
Отвечайте на вопрос, который вы задали в комментариях, причина, по которой relativedelta
и tz
появляются в пространстве имен после from dateutil import parser
, потому что parser
сам импортирует relativedelta
и tz
.
Если вы посмотрите на исходный код dateutil/parser.py
, вы увидите импорт.
# -*- coding:iso-8859-1 -*-
"""
Copyright (c) 2003-2007 Gustavo Niemeyer <[email protected]>
This module offers extensions to the standard Python
datetime module.
"""
... snip ...
from . import relativedelta
from . import tz