这不应该太难,但我似乎无法让它工作.
我想在
Python中比较两个datetime.date类型,但我不断收到类型错误:
from datetime import date
class Vacancy(object):
def __init__(self, date): #date is a datetime string of format 2017-13-03T00.00.000Z
self.date = datetime.strptime(date[:-1], '%Y-%m-%dT%H:%M:%S.%f').date()
def getDate(self):
return self.date
all_objects = [o1, o2, o3, o4, ...] #contains objects of type Vacancy
for o in all_objects:
earliestDate = date(2020, 1, 1)
if o.getDate() < earliestDate:
earliestDate = o.getDate()
print(earliestDate)
TypeError:’<‘ ‘datetime.date’和’method’的实例之间不支持 这对我没有意义,因为:
print(type(earliestDate))和print(type(o.getDate()))都给出
< class’datetime.date’>
我能做错什么?
编辑:为all_objects中的对象添加了类示例代码
EDIT2:正如你们许多人所指出的那样,确实缺少'()’.在我的实际代码中,我通过执行earliestDate = o.getDate来分配值的方法instad.下次我会尝试对我的代码更加真实.感谢大家提供的见解,因为我确实来自Java,但我还没有完全理解Python.
最佳答案 TypeError应该为您提供解决此问题所需的所有信息.以下是解释它的方法:
TypeError: '<' not supported between instances of 'datetime.date' and 'method'
>’<‘不支持意味着您在使用 >比较不起作用,因为您要比较的事情之一不是datetime.date实例.你也已经有了这个.
>如果您使用o.getDate而不是o.getDate(),那么您将获得方法类型.在Python中,您可以根据需要传递方法作为值,就像lambdas或函数一样.但是,在这种情况下,这不是您想要的,因此请确保在想要调用方法的任何地方使用(),即使它不接受任何参数.
>错误消息中类型的顺序也很有趣. datetime.date出现在方法之前意味着日期在左侧,有问题的值在右侧.在您的情况下,earliestDate持有方法而不是datetime.date.
>现在我们知道最早的日期是问题,它在哪里更新? earliestDate = date(2020,1,1)显然是一个日期,但是earliestDate = o.getDate()怎么样?它使用括号,因此o.getDate()必须返回一个方法.
>鉴于您的代码,Vacancy将始终将self.date设置为日期,否则将抛出异常(类似于ValueError:时间数据’xxx’与格式’%Y-%m-%dT%H不匹配: %M:%S%F’).我猜你的代码看起来不一样,并且Vacancy的初始化在某种程度上是错误的.这是提供MCVE的好处:)