我正在尝试编写代码以检查它是星期日还是星期六。但是我遇到以下错误:
代码是:
import datetime
def isholiday(date):
dat0 = date(2019, 3, 23) # Saturday
dat1 = date(2019, 3, 24) # Sunday
if abs(date - dat0) % 7 == 0 | abs(date - dat1)%7 == 0 :
print ("is holiday")
return True
在下一行中,我有:
assert(isholiday(datetime.datetime(2018, 10, 21))==True)
错误是:
------------------------------------------------------------------------
---
TypeError Traceback (most recent call
last)
<ipython-input-22-87d6e5a340a0> in <module>()
----> 1 assert(isholiday(datetime.datetime(2018, 10, 21))==True)
<ipython-input-21-bb556bebaa01> in isholiday(date)
2 from datetime import date
3 def isholiday(date):
----> 4 dat0 = date(2019,3,23)
5 dat1 = date(2019,3,24)
6 if abs(date - dat0)%7 == 0 | abs(date - dat1)%7 == 0 :
TypeError: 'datetime.datetime' object is not callable
答案 0 :(得分:0)
您的date
函数的参数isholiday
遮盖了datetime.date
类。您应该重命名该参数以避免这种命名冲突:
def isholiday(dat):
dat0 = date(2019,3,23) #Saturday
dat1 = date(2019,3,24) #Sunday
if abs(dat - dat0)%7 == 0 | abs(dat - dat1)%7 == 0 :
print ("is holiday")
return True
答案 1 :(得分:0)
我想你是说这个意思
dat0 = datetime.datetime(2019,3,23) #Saturday
dat1 = datetime.datetime(2019,3,24) #Sunday
当前,您正在函数中使用'date'参数,然后使用括号和参数“调用”它。仅在初始化时使用。
答案 2 :(得分:0)
使用weekday()
。另外,您的函数应始终返回某些内容,不仅有时返回True
。
from datetime import date
def isholiday(dat):
if dat.weekday() == 6 or dat.weekday == 5: # 6 is Sunday, 5 is Saturday
print ("is holiday")
return True
return False
assert(isholiday(date(2018, 10, 21))==True)
礼物:
是假期
答案 3 :(得分:0)
我这样修改了您的代码:
import datetime
def isholiday(date):
dat0 = datetime.datetime(2019,3,23) #Saturday
dat1 = datetime.datetime(2019,3,24) #Sunday
if abs((date - dat0).days)%7 == 0 or abs((date - dat1).days)%7 == 0:
print ("is holiday")
return True
assert(isholiday(datetime.datetime(2018, 10, 21))==True)
您正试图调用'date'参数,而不能像这样调用datetime.dateime对象。我用datetime.datetime更改了第5行和第6行中的日期。同样,您不能将abs()函数与datetime.timedelta对象一起使用,就像与整数一起使用一样,因此您应该只获得“ day”。我为此添加了.days。