【问题标题】:python debug straightforward datetime objectpython调试简单的日期时间对象
【发布时间】:2013-04-04 07:57:32
【问题描述】:

我不明白为什么会失败,有人可以解释一下吗:

import datetime

def test(timestamp):
    xt = datetime(2013, 4,4)
    dt = datetime.strptime(timestamp, '%d/%m/%Y %H:%M:%S')
    print (xt,dt)

test('04/04/2013 08:37:20')

错误是:

回溯(最近一次通话最后): 文件“”,第 12 行,在 文件“”,第 5 行,在测试中 TypeError:“模块”对象不可调用

它似乎可以与from datetime import datetime 一起使用。我不明白有什么区别。

谢谢。

【问题讨论】:

    标签: python datetime


    【解决方案1】:

    因为在datetime 模块中,有一个datetime() 函数,但是您没有调用它(而是尝试调用该模块,这就是您得到TypeError: 'module' object is not callable 的原因)。

    import datetime
    def test(timestamp):
        xt = datetime(2013, 4,4) # Problem is this line.
        dt = datetime.strptime(timestamp, '%d/%m/%Y %H:%M:%S')
        print (xt,dt)
    
    test('04/04/2013 08:37:20')
    

    要修复这条线,请将其更改为:

    xt = datetime.datetime(2013,4,4)
    

    from datetime import datetime起作用的原因是因为你导入了特定的函数,所以你不需要做datetime.datetime()

    【讨论】:

    • 下面的行也必须改为dt = datetime.datetime.strptime(timestamp, '%d/%m/%Y %H:%M:%S')才能为我运行。
    【解决方案2】:

    datetime 既是一个模块又是该模块中的一个类。在您的示例中,您需要datetime.datetime

    【讨论】:

      【解决方案3】:

      xt = datetime(2013, 4,4)
      

      应该是

      xt = datetime.datetime(2013, 4,4)
      

      这里,datetime 是模块的名称。类的全名是datetime.datetime

      【讨论】:

        【解决方案4】:

        datetime 是日期时间模块datetime.datetime 是日期时间类型

        import datetime
        
        def test(timestamp):
            xt = datetime.datetime(2013, 4,4)
            dt = datetime.datetime.strptime(timestamp, '%d/%m/%Y %H:%M:%S')
            print (xt,dt)
        

        【讨论】:

          【解决方案5】:

          这里datetime可以引用模块或模块内的类,所以你必须消除歧义

          import datetime
          
          def test(timestamp):
              xt = datetime.datetime(2013, 4,4)
              dt = datetime.datetime.strptime(timestamp, '%d/%m/%Y %H:%M:%S')
              print (xt,dt)
          
          test('04/04/2013 08:37:20')
          

          给出以下输出:

          (datetime.datetime(2013, 4, 4, 0, 0), datetime.datetime(2013, 4, 4, 8, 37, 20))

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多