我在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
)。
任何人都知道发生了什么?
答案 0 :(得分:54)
您尚未导入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