TypeError:start_end_period()得到一个意外的关键字参数'months'

时间:2017-09-25 21:08:25

标签: python

model.train()

我正在努力解决这个错误。由于/example/vendor/bundle/ruby/2.3.0/gems/posix-spawn-0.3.12/test/可以直接TypeError: start_end_period() got an unexpected keyword argument 'months' relativedelta.relativedelta(test),我可以直接将months=1作为参数传递给years=1方法。

test

我如何调整此方法,以便它可以使用单个参数或关键字参数,因为start_end_period()start_date = CustomerProfile.objects.filter(user__date_joined__gte=entry_date_production).first().user.date_joined def start_end_period(period): start = start_date - relativedelta.relativedelta(period) end = start + relativedelta.relativedelta(period - 1) return start, end 都很好?

1 个答案:

答案 0 :(得分:1)

首先,您不能将数月或数年的时间用于需要一段时间但不需要数天,数月或数年的功能。将函数声明为采用您想要的内容。

然后你需要将它们传递给relativedelta构造函数。这是最简单的方法

from dateutil.relativedelta import relativedelta

def start_end_period(start_date, days=0, months=0, years=0):
    period = relativedelta(days=days, months=months, years=years)
    start = start_date - period
    end = start + period + relativedelta(days=1)
    return start, end

import datetime
start_date = datetime.date(year=2017, month=3, day=1)
print (start_date)

print (start_end_period(start_date, days=7))
print (start_end_period(start_date, months=2))
print (start_end_period(start_date, years=1))

但是,您应该使用** kwargs,它将通过传递给函数的任何内容自动支持所有relativedelta的选项。

def start_end_period(start_date, **kwargs):
    period = relativedelta(**kwargs)