2013-05-28 44 views
10

Dưới đây là mã tôi đang làm việc. Từ những gì tôi có thể nói không có vấn đề, nhưng khi tôi cố gắng chạy đoạn mã tôi nhận được một lỗi.Timedelta không được xác định

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 

Lỗi là như sau:

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 

Bất kỳ trợ giúp sẽ được đánh giá cao.

Trả lời

16

Bạn đã nhập datetime, nhưng chưa được xác định timedelta. Bạn muốn một trong hai:

from datetime import timedelta 

hay:

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

Ngoài ra, tham số GoBack của bạn được định nghĩa như là một chuỗi, nhưng sau đó bạn vượt qua nó để timedelta như số giờ. Bạn sẽ cần phải chuyển đổi nó thành số nguyên hoặc tốt hơn nên đặt đối số type trong tùy chọn của bạn thành int thay thế.

+0

Hoàn hảo, cảm ơn bạn vì đã giúp đỡ. Tôi nghĩ rằng việc sử dụng dễ dàng hơn nhiều: 'datetime.timedelta' và tôi đã thay đổi loại thành int. Cám ơn bạn một lần nữa. – Mitchell

+0

Có, một khi bạn đã nhập datetime tham chiếu đến lớp timedelta bởi 'datetime.timedelta' sẽ là thực hành tốt nhất thông thường. Vấn đề là nhập mô-đun datetime sẽ cho bạn tất cả các tên mà nó định nghĩa, nhưng bạn phải tham khảo chúng thông qua không gian tên của nó. Bạn sẽ thấy mô hình chung của việc nhập một mô-đun và sau đó tham chiếu nội dung của nó một cách thường xuyên. –

1

Nó phải là datetime.timedelta

2

Nơi bạn có timedelta, bạn cần phải đặt datetime. trước nó, vì vậy nó thực sự datetime.timedelta

0

Tôi thấy vấn đề này có thể xảy ra trong một số hành động sutpid tôi. Tôi tạo tệp có tên datetime.py và thậm chí tôi đổi tên tệp, tôi vẫn để nguyên datetime.pyc trong thư mục ... Vì vậy, mọi tệp nhập thời gian chờ sẽ sử dụng tệp này và không tìm thấy timedelta. Sau khi tôi xóa tệp: datetime.pyc, Nó hoạt động.

Các vấn đề liên quan