我在AppEngine上收到type object 'datetime.datetime' has no attribute 'datetime'
错误,抱怨日期时间类型,但我的导入是import datetime
。 其他文件中的 from datetime import datetime
,但我不认为这会影响此文件?
没有'意外'重新进口,我已经检查过了。我检查了我的AppEngine日志,它只在2天前开始发生。
我正在使用2.7运行时。
编辑:这是导致错误的行(请注意我使用的是import datetime
,而不是from datetime import datetime
)
task.due_at = datetime.datetime.strptime(date, '%Y-%m-%d %I:%M%p')
编辑:堆栈跟踪
type object 'datetime.datetime' has no attribute 'datetime'
Traceback (most recent call last):
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/base/data/home/apps/s~wmphighrise/1.373696587983821954/myapp/handler/decorators.py", line 22, in wrapper
return fn(*args, **kwargs)
File "/base/data/home/apps/s~wmphighrise/1.373696587983821954/myapp/handler/api/main.py", line 1343, in post
task.due_at = datetime.datetime.strptime(date, '%Y-%m-%d %I:%M%p')
AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
编辑3:一些调试
注意:import datetime
位于顶部
#1st attempt
import datetime
class MyHandler():
def get(self):
logging.info(datetime) # => "<type 'datetime.datetime'>"
#2nd attempt
import datetime
class MyHandler():
def get(self):
import datetime # explicitly re-import the module
logging.info(datetime) # => "<module 'datetime' (built-in)>"
#3rd attempt
import datetime
class MyHandler():
def get(self):
logging.info(datetime) # => Throws UnboundLocalError: local variable 'datetime' referenced before assignment
# Is this normal? This is new to me.
import datetime
logging.info(datetime)
#4th attempt
import datetime
logging.info(datetime) # => "<module 'datetime' (built-in)>"
class MyHandler():
def get(self):
logging.info(datetime) # => "<type 'datetime.datetime'>"
是否有办法将变量重新定义在当前文件或模块之外?因为我看了看这个文件并且根本没有重新定义。
编辑4:
我ack
'd "datetime ="
,"datetime="
,"datetime.datetime ="
和"datetime.datetime="
,但没有重新分配的结果。我最近2天检查了我的git日志,并没有可以引入它的更改
答案 0 :(得分:5)
您所包含的代码对我有用,因此问题可能是您使用名为datetime
的{{1}}对象隐藏了datetime.datetime
模块。不用说,我打算输入所有内容。
datetime
答案 1 :(得分:1)
如果我理解正确,您就会在以下代码段中询问UnboundLocalError
错误。我是对的吗?
#3rd attempt
import datetime
class MyHandler():
def get(self):
logging.info(datetime) # => Throws UnboundLocalError: local variable 'datetime' referenced before assignment
# Is this normal? This is new to me.
import datetime
logging.info(datetime)
如果是这样,错误很明显。你应该理解两件事:
所有命名空间更改(赋值,del,import,def,类)都发生在本地范围中(即在命名空间更改代码执行的当前范围内)
import X导入模块X,并在当前命名空间中创建对该模块的引用。即import
更改命名空间。
虽然名称datetime
确实在函数import datetime
中调用get
之前和之后引用了同一个对象(模块日期时间),但这两个datetime
的范围不同(第一个全球,第二个本地)。
一旦Python检测到在本地范围内有一个名称(在您的情况下为“datetime”),如果您在本地名称绑定
>>> import datetime
>>> def get():
print(dir())
>>> get()
[]
>>> def get():
import datetime
print(dir())
>>> get()
['datetime']
>>>
希望它有所帮助。
答案 2 :(得分:0)
我总是笑出来说datetime.datetime
,但你已经更进一步了,并向python询问了datetime.datetime
的属性datetime
。 :d
当然,python没有datetime.datetime.datetime