我在玩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__']
问题是,当我尝试直接从 dateutil
导入 parser
时,它似乎确实存在:
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.py
是 dateutil
中的一个模块包裹。它是文件夹结构中的一个单独文件。
回答你在评论中提出的问题,原因是relativedelta
和 tz
在您 from dateutil import parser
之后出现在命名空间中是因为parser
自己进口 relativedelta
和 tz
.
如果你查看 dateutil/parser.py
的源代码,您可以看到导入。
# -*- coding:iso-8859-1 -*-
"""
Copyright (c) 2003-2007 Gustavo Niemeyer <gustavo@niemeyer.net>
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/