2017-11-22 4 views
2

나는 파이썬 3.6과 호환되는 파이썬 2.7 코드를 작성하고있다.파이썬 2.7 datetime 형식의 파이썬 3.6 datetime 개체

코드는 파이썬 2.7에서 잘 작동하지만 난 파이썬 3.6에서 날짜 문제를 점점 오전 :

def insert_event(self, subject_event): 
     for x in range (0,self.event_count): 
      if self.events[x].time <= subject_event.time: 


TypeError: '<=' not supported between instances of 'type' and 'datetime.datetime' 

은 내가이있어 코드를 디버깅 않은 경우 :

(Pdb) print (subject_event) 
<event.Event object at 0x7f89b7cdb908> 
(Pdb) print (subject_event.time) 
2018-01-01 06:05:00 
(Pdb) self.events 
[<event.Event object at 0x7f89b7cd1da0>, <event.Event object at 0x7f89b7cd1828>] 
(Pdb) self.events[0] 
<event.Event object at 0x7f89b7cd1da0> 
(Pdb) self.events[0].time 
<class 'datetime.datetime'> 



(Pdb) self.events[x] 
<event.Event object at 0x7ffb339a31d0> 
(Pdb) type(self.events[x]) 
<class 'event.Event'> 
(Pdb) self.events[x].time 
<class 'datetime.datetime'> 
(Pdb) type(self.events[x].time) 
<class 'type'> 

(Pdb) self.events[x].__dict__ 
{'time': <class 'datetime.datetime'>, 'id': 'bcdfd404-67e9-4ef3-a699-8afde902685e', 'constraint': None, 'constraint_time': <class 'datetime.time'>, 'action': 'ShiftStart', 'cust_in_car': 0, 'previous': None, 'neo_id': 1340, 'user': None, 'place': None, 'resource': None, 'shift': None, 'linked': None, 'epoch': 1514775600000, '_driver': <neo4j.v1.direct.DirectDriver object at 0x7ffb339a3390>} 
(Pdb) self.events[x].time.__dict__ 
mappingproxy({'__repr__': <slot wrapper '__repr__' of 'datetime.datetime' objects>, '__hash__': <slot wrapper '__hash__' of 'datetime.datetime' objects>, '__str__': <slot wrapper '__str__' of 'datetime.datetime' objects>, '__getattribute__': <slot wrapper '__getattribute__' of 'datetime.datetime' objects>, '__lt__': <slot wrapper '__lt__' of 'datetime.datetime' objects>, '__le__': <slot wrapper '__le__' of 'datetime.datetime' objects>, '__eq__': <slot wrapper '__eq__' of 'datetime.datetime' objects>, '__ne__': <slot wrapper '__ne__' of 'datetime.datetime' objects>, '__gt__': <slot wrapper '__gt__' of 'datetime.datetime' objects>, '__ge__': <slot wrapper '__ge__' of 'datetime.datetime' objects>, '__add__': <slot wrapper '__add__' of 'datetime.datetime' objects>, '__radd__': <slot wrapper '__radd__' of 'datetime.datetime' objects>, '__sub__': <slot wrapper '__sub__' of 'datetime.datetime' objects>, '__rsub__': <slot wrapper '__rsub__' of 'datetime.datetime' objects>, '__new__': <built-in method __new__ of type object at 0x9f7500>, 'now': <method 'now' of 'datetime.datetime' objects>, 'utcnow': <method 'utcnow' of 'datetime.datetime' objects>, 'fromtimestamp': <method 'fromtimestamp' of 'datetime.datetime' objects>, 'utcfromtimestamp': <method 'utcfromtimestamp' of 'datetime.datetime' objects>, 'strptime': <method 'strptime' of 'datetime.datetime' objects>, 'combine': <method 'combine' of 'datetime.datetime' objects>, 'date': <method 'date' of 'datetime.datetime' objects>, 'time': <method 'time' of 'datetime.datetime' objects>, 'timetz': <method 'timetz' of 'datetime.datetime' objects>, 'ctime': <method 'ctime' of 'datetime.datetime' objects>, 'timetuple': <method 'timetuple' of 'datetime.datetime' objects>, 'timestamp': <method 'timestamp' of 'datetime.datetime' objects>, 'utctimetuple': <method 'utctimetuple' of 'datetime.datetime' objects>, 'isoformat': <method 'isoformat' of 'datetime.datetime' objects>, 'utcoffset': <method 'utcoffset' of 'datetime.datetime' objects>, 'tzname': <method 'tzname' of 'datetime.datetime' objects>, 'dst': <method 'dst' of 'datetime.datetime' objects>, 'replace': <method 'replace' of 'datetime.datetime' objects>, 'astimezone': <method 'astimezone' of 'datetime.datetime' objects>, '__reduce_ex__': <method '__reduce_ex__' of 'datetime.datetime' objects>, '__reduce__': <method '__reduce__' of 'datetime.datetime' objects>, 'hour': <attribute 'hour' of 'datetime.datetime' objects>, 'minute': <attribute 'minute' of 'datetime.datetime' objects>, 'second': <attribute 'second' of 'datetime.datetime' objects>, 'microsecond': <attribute 'microsecond' of 'datetime.datetime' objects>, 'tzinfo': <attribute 'tzinfo' of 'datetime.datetime' objects>, 'fold': <attribute 'fold' of 'datetime.datetime' objects>, '__doc__': 'datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])\n\nThe year, month and day arguments are required. tzinfo may be None, or an\ninstance of a tzinfo subclass. The remaining arguments may be ints.\n', 'min': datetime.datetime(1, 1, 1, 0, 0), 'max': datetime.datetime(9999, 12, 31, 23, 59, 59, 999999), 'resolution': datetime.timedelta(0, 0, 1)}) 
: 파이썬 3.6에서

(Pdb) self.events[x] 
<event.Event object at 0x7fce0b43c590> 
(Pdb) type(self.events[x]) 
<class 'event.Event'> 
(Pdb) self.events[x].time 
<type 'datetime.datetime'> 
(Pdb) type(self.events[x].time) 
<type 'type'> 

(Pdb) self.events[x].__dict__ 
{'resource': None, 'constraint_time': <type 'datetime.time'>, 'constraint': None, 'shift': None, '_driver': <neo4j.v1.direct.DirectDriver object at 0x7fce0b43c910>, 'cust_in_car': 0, 'linked': None, 'epoch': 1514775600000, 'place': None, 'user': None, 'time': <type 'datetime.datetime'>, 'action': 'ShiftStart', 'neo_id': 2339, 'id': 'e828acca-5d32-42e1-967d-c044c775ae47', 'previous': None} 
(Pdb) self.events[x].time.__dict__ 
dict_proxy({'__str__': <slot wrapper '__str__' of 'datetime.datetime' objects>, '__getattribute__': <slot wrapper '__getattribute__' of 'datetime.datetime' objects>, '__radd__': <slot wrapper '__radd__' of 'datetime.datetime' objects>, 'utctimetuple': <method 'utctimetuple' of 'datetime.datetime' objects>, 'second': <attribute 'second' of 'datetime.datetime' objects>, 'utcnow': <method 'utcnow' of 'datetime.datetime' objects>, '__lt__': <slot wrapper '__lt__' of 'datetime.datetime' objects>, '__sub__': <slot wrapper '__sub__' of 'datetime.datetime' objects>, '__new__': <built-in method __new__ of type object at 0x939c20>, 'min': datetime.datetime(1, 1, 1, 0, 0), 'dst': <method 'dst' of 'datetime.datetime' objects>, 'astimezone': <method 'astimezone' of 'datetime.datetime' objects>, 'strptime': <method 'strptime' of 'datetime.datetime' objects>, 'utcfromtimestamp': <method 'utcfromtimestamp' of 'datetime.datetime' objects>, 'combine': <method 'combine' of 'datetime.datetime' objects>, 'timetuple': <method 'timetuple' of 'datetime.datetime' objects>, 'max': datetime.datetime(9999, 12, 31, 23, 59, 59, 999999), 'tzinfo': <attribute 'tzinfo' of 'datetime.datetime' objects>, '__doc__': 'datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])\n\nThe year, month and day arguments are required. tzinfo may be None, or an\ninstance of a tzinfo subclass. The remaining arguments may be ints or longs.\n', 'tzname': <method 'tzname' of 'datetime.datetime' objects>, 'isoformat': <method 'isoformat' of 'datetime.datetime' objects>, '__ne__': <slot wrapper '__ne__' of 'datetime.datetime' objects>, '__reduce__': <method '__reduce__' of 'datetime.datetime' objects>, 'replace': <method 'replace' of 'datetime.datetime' objects>, 'utcoffset': <method 'utcoffset' of 'datetime.datetime' objects>, 'microsecond': <attribute 'microsecond' of 'datetime.datetime' objects>, '__add__': <slot wrapper '__add__' of 'datetime.datetime' objects>, '__gt__': <slot wrapper '__gt__' of 'datetime.datetime' objects>, 'date': <method 'date' of 'datetime.datetime' objects>, 'now': <method 'now' of 'datetime.datetime' objects>, '__eq__': <slot wrapper '__eq__' of 'datetime.datetime' objects>, 'minute': <attribute 'minute' of 'datetime.datetime' objects>, 'ctime': <method 'ctime' of 'datetime.datetime' objects>, 'hour': <attribute 'hour' of 'datetime.datetime' objects>, 'fromtimestamp': <method 'fromtimestamp' of 'datetime.datetime' objects>, '__le__': <slot wrapper '__le__' of 'datetime.datetime' objects>, '__repr__': <slot wrapper '__repr__' of 'datetime.datetime' objects>, 'time': <method 'time' of 'datetime.datetime' objects>, '__hash__': <slot wrapper '__hash__' of 'datetime.datetime' objects>, '__rsub__': <slot wrapper '__rsub__' of 'datetime.datetime' objects>, 'timetz': <method 'timetz' of 'datetime.datetime' objects>, 'resolution': datetime.timedelta(0, 0, 1), '__ge__': <slot wrapper '__ge__' of 'datetime.datetime' objects>}) 
: 파이썬 2.7에서

파이썬 3.6에서 날짜 시간이 변경 되었습니까?

+0

첫 번째 값은 'DateTime' 인스턴스가 아니라'DateTime' 클래스입니다. –

+0

이것을 python2.7과 python3에서 시도해보십시오 :'import datetime; (datetime.datetime.now()) <= datetime.datetime.now()'python2.7에서는'False'를, python3에서는 순서가 맞지 않는 타입 오류가 발생합니다. 내 생각 엔 코드가 처음에는 작동하지 않았을 것입니다. – grepe

답변

1

TypeError의 이유는 다른 유형의 객체가 인데 비해서는 (숫자 유형과 같은 일부 예외가 있음)입니다. 파이썬 2에서는 서로 다른 유형의 객체를 비교하는 것이 합법적입니다.

자세한 내용은 What's new in Python 3을 확인하십시오.

실제로 계급 및 인스턴스가 아닌 datetime인스턴스을 비교하려고합니다.

+0

in python 2.7 : from datetime import datetime; start_date = datetime, start_date 유형은 type입니다. 파이썬에서 3.6 : datetime import datetime; start_date = datetime, start_date의 유형은 class입니다. –

+0

start_date <= datetime.now()는 파이썬 2.7과 파이썬 3.6에서 true/false를 얻을 것이며, start_time <= datetime.now()는'typeerror'를 얻을 것입니다. –