2013-05-28 192 views
10

以下是我正在處理的代碼。從我可以告訴的沒有問題,但是當我嘗試運行這段代碼時,我收到一個錯誤。Timedelta未定義

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 

任何幫助,將不勝感激。

回答

16

您已導入日期時間,但未定義timedelta。你想要麼:

from datetime import timedelta 

或:

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

此外,您GoBack的參數定義爲一個字符串,但你把它傳遞給timedelta的小時數。您需要將其轉換爲整數,或者更好的是將您的選項中的參數type改爲int

+0

完美,謝謝你的所有幫助。 我認爲這是更簡單的使用: 'datetime.timedelta' 和我已經改變類型爲int。再次感謝你。 – Mitchell

+0

是的,一旦你通過'datetime.timedelta'引用了timedelta類的日期時間就是通常的最佳實踐。關鍵是導入日期時間模塊可以獲得它定義的所有名稱,但是您必須通過名稱空間引用它們。您將看到導入模塊的一般模式,然後經常引用其內容。 –

2

如果你有timedelta,你需要在前面加上datetime.,所以它實際上是datetime.timedelta

0

我發現我的一些sutpid行動可能會出現此問題。 我創建了一個名爲datetime.py的文件,甚至我重命名了文件,我仍將datetime.pyc保留在文件夾中...因此,每個導入dateime的文件都將使用此文件,並且找不到timedelta。 我刪除文件datetime.pyc後,它可以正常工作。