我在Python 2.7.3中使用 dateutil module。我只是想使用:

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)。

有人知道发生了什么吗?

最佳答案

您尚未导入dateutil.parser。您可以看到它,但是必须以某种方式将其导入。

>>> import dateutil.parser
>>> dateutil.parser.parse("01-02-2013")
datetime.datetime(2013, 1, 2, 0, 0)

这是因为parser.pydateutil包中的模块。这是文件夹结构中的单独文件。

回答您在注释中提出的问题,即relativedelta之后tzfrom dateutil import parser出现在 namespace 中的原因是因为parser本身导入了relativedeltatz

如果查看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

关于python - 使用 “import dateutil”和 “dateutil.parser.parse()”时出现AttributeError,但使用 “from dateutil import parser”时没有问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23385003/

10-09 17:18