【问题标题】:Timedelta is not definedTimedelta 未定义
【发布时间】:2013-05-22 20:54:46
【问题描述】:

下面是我正在处理的代码。据我所知没有问题,但是当我尝试运行这段代码时,我收到了错误。

import os 
import datetime

def parseOptions():

    import optparse
    parser = optparse.OptionParser(usage= '-h')
    parser.add_option('-t', '--type', \
                      choices= ('Warning', 'Error', 'Information', 'All'), \
                      help= 'The type of error',
                      default= 'Warning')
    parser.add_option('-g', '--goback', \
                      type= 'string')
    (options, args) = parser.parse_args()
    return options

options = parseOptions() now = datetime.datetime.now() subtract = timedelta(hours=options.goback) difference = now - subtract

if options.type=='All' and options.goback==24:
    os.startfile('logfile.htm')

else: 
    print
    print 'Type =', options.type,
    print
    print 'Go Back =', options.goback,'hours'
    print difference.strftime("%H:%M:%S %a, %B %d %Y")
    print

错误如下:

Traceback (most recent call last):
  File "C:\Python27\Lib\SITE-P~1\PYTHON~2\pywin\framework\scriptutils.py", line 325, in RunScript
    exec codeObject in __main__.__dict__
  File "C:\Users\user\Desktop\Python\python.py", line 19, in <module>
    subtract = timedelta(hours=options.goback)
NameError: name 'timedelta' is not defined

任何帮助将不胜感激。

【问题讨论】:

    标签: python python-2.7 nameerror


    【解决方案1】:

    您已导入日期时间,但未定义时间增量。你想要:

    from datetime import timedelta
    

    或:

    subtract = datetime.timedelta(hours=options.goback)
    

    此外,您的 goback 参数被定义为一个字符串,但是您将它作为小时数传递给 timedelta。您需要将其转换为整数,或者最好将选项中的 type 参数设置为 int

    【讨论】:

    • 完美,谢谢大家的帮助。我认为使用起来要容易得多:datetime.timedelta 并且我已将类型更改为 int。再次感谢您。
    • 是的,一旦您通过datetime.timedelta 引用 timedelta 类导入日期时间,这将是通常的最佳实践。关键是导入 datetime 模块会得到它定义的所有名称,但您必须通过其命名空间引用它们。您将看到导入模块然后经常引用其内容的一般模式。
    • 仍然给出 NameError: name 'timedelta_series' is not defined
    【解决方案2】:

    应该是datetime.timedelta

    【讨论】:

      【解决方案3】:

      你有timedelta的地方,你需要把datetime.放在它前面,所以它实际上是datetime.timedelta

      【讨论】:

        【解决方案4】:

        我发现这个问题可能出现在我的一些愚蠢行为中。 我创建了一个名为 datetime.py 的文件,即使我重命名了该文件,我仍然将 datetime.pyc 留在文件夹中...... 所以每一个导入 datetime 的文件都会用到这个文件,而 timedelta 是找不到的。 删除文件后:datetime.pyc,它可以工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-28
          • 2014-05-06
          • 1970-01-01
          • 1970-01-01
          • 2010-10-21
          • 2021-11-19
          • 2018-09-08
          相关资源
          最近更新 更多