2013-05-28 28 views
10

Aşağıda çalıştığım kod. Anlatabildiğim kadarıyla sorun yok, ama kod parçasını çalıştırmaya çalıştığımda bir hata alıyorum.Timedelta tanımlı değil

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 

hata takip gibidir:

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 

bir Yardım takdir.

cevap

16

Tarih zamanını aldınız, ancak tanımlı olmayan zaman çizelgesini aldınız. Sen istemek ya:

from datetime import timedelta 

ya:

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

Ayrıca, goback parametresi bir dize olarak tanımlanır, ama sonra saat sayısı gibi timedelta geçmek. Bir tamsayıya dönüştürmeniz veya daha iyi bir seçenek olarak type argümanını bunun yerine int yerine ayarlamanız gerekir.

+0

Mükemmel, tüm yardımlar için teşekkür ederiz. Kullanımının daha rahat olduğunu düşünüyorum: 'datetime.timedelta' ve türünü int olarak değiştirdim. Tekrar teşekkürler. – Mitchell

+0

Evet, bir kez datetime 'ttetime.timedelta' tarafından timedelta sınıfına atıfta bulunduğunuzda, alışılmışın en iyi uygulaması olacaktır. Buradaki nokta, datetime modülünün içe aktarılması, tanımladığınız tüm isimleri size ulaştırmasıdır, ancak bunları ad alanı aracılığıyla göndermeniz gerekir. Bir modülü içe aktarmanın genel modelini ve daha sonra içeriğine çok sık başvuruyorsunuz. –

1

Size timedelta var datetime.timedelta

2

, bunu önce datetime. koymak gerekir olmalı, bu nedenle datetime.timedelta

0

aslında bu sorun benim sutpid eylem bazı oluşabilir bulabilirsiniz. datetime.py adında bir dosya oluşturuyorum ve hatta dosyayı yeniden adlandırıyorum, hala datetime.pyc dosyasını klasörde bırakıyorum ... Bu nedenle, dateime alan her dosya bu dosyayı kullanacak ve zaman çizelgesi bulunamıyor. Dosyayı sildikten sonra: datetime.pyc, Çalışıyor.