2013-05-28 23 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

आपने डेटाटाइम आयात किया है, लेकिन परिभाषित टाइमडेल्टा नहीं है। आप चाहते हैं या तो:

from datetime import timedelta 

या:

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

इसके अलावा, आपके GoBack पैरामीटर स्ट्रिंग के रूप में परिभाषित किया गया है, लेकिन फिर आप घंटों की संख्या के रूप में timedelta को इसे पारित। आपको इसे एक पूर्णांक में परिवर्तित करने की आवश्यकता होगी, या इसके बजाय तर्क को अपने विकल्प में int पर सेट करने की आवश्यकता होगी।

+0

बिल्कुल सही, सभी मदद के लिए धन्यवाद। मुझे लगता है कि यह उपयोग करने में बहुत आसान है: 'datetime.timedelta' और मैंने टाइप को int में बदल दिया है। फिर से धन्यवाद। – Mitchell

+0

हां, एक बार जब आपने टाइमटाइटा क्लास का उल्लेख करते हुए डेटाटाइम आयात किया है तो 'datetime.timedelta' सामान्य सामान्य अभ्यास होगा। मुद्दा यह है कि डेटाटाइम मॉड्यूल को आयात करने से आप सभी नामों को परिभाषित कर सकते हैं, लेकिन आपको उन्हें अपने नामस्थान के माध्यम से संदर्भित करना होगा। आप मॉड्यूल आयात करने के सामान्य पैटर्न को देखेंगे और फिर इसकी सामग्री को अक्सर संदर्भित करेंगे। –

2

कहाँ timedelta है, तो आप यह पहले datetime. लगाने की जरूरत है, तो यह वास्तव में datetime.timedelta

0

मैं इस समस्या को मेरी sutpid कार्रवाई से कुछ में हो सकता है पाते हैं। मैं datetime.py नाम की एक फ़ाइल बनाता हूं और यहां तक ​​कि मैं फ़ाइल का नाम बदलता हूं, फिर भी मैं फ़ोल्डर में datetime.pyc छोड़ देता हूं ... इसलिए तिथि आयात करने वाली प्रत्येक फ़ाइल इस फ़ाइल का उपयोग करेगी और टाइमडेल्टा नहीं मिल सका। फ़ाइल को हटाने के बाद: datetime.pyc, यह काम करता है।

संबंधित मुद्दे