“类型对象'datetime.datetime'没有属性'datetime'”,即使使用“import datetime”也是如此

时间:2014-02-12 06:50:12

标签: python google-app-engine datetime

我在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日志,并没有可以引入它的更改

3 个答案:

答案 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)

如果是这样,错误很明显。你应该理解两件事:

  1. 所有命名空间更改(赋值,del,import,def,类)都发生在本地范围中(即在命名空间更改代码执行的当前范围内)

  2. import X导入模块X,并在当前命名空间中创建对该模块的引用。即import更改命名空间。

  3. 虽然名称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