在Python calendar.monthrange中使用变量时出错

在Python calendar.monthrange中使用变量时出错,python,arrow-python,Python,Arrow Python,我正在尝试使用Pythoncalendar.monthrange函数打印一个月的天数 我有一个脚本,每个月1日通过cron运行,需要返回上个月的天数。 我还使用arrow模块更好地处理和格式化我在脚本中使用的任何日期/时间调用 因为我需要找到上个月的天数,从脚本运行日期算起只有一天,我只需要通过timedelta减去1 下面是我的代码的简化版本,但这是工作部分: import calendar import arrow import time from datetime import date,

我正在尝试使用Python
calendar.monthrange
函数打印一个月的天数

我有一个脚本,每个月1日通过cron运行,需要返回上个月的天数。 我还使用arrow模块更好地处理和格式化我在脚本中使用的任何日期/时间调用

因为我需要找到上个月的天数,从脚本运行日期算起只有一天,我只需要通过timedelta减去1

下面是我的代码的简化版本,但这是工作部分:

import calendar
import arrow
import time
from datetime import date, timedelta

yesterday = date.today() - timedelta(1)

cYfDate = yesterday.strftime('%Y.%m.%d')
cYfDateY = arrow.get(cYfDate).format('YYYY')
cYfDateM = arrow.get(cYfDate).format('M')

print cYfDateY
print cYfDateM

print calendar.monthrange(cYfDateY + ',' + cYfDateM)[1]
前两个打印行工作正常,显示正确的年份和月份,但第三个打印行出现错误:

Traceback (most recent call last):
  File "/home/pi/SystemChecker.py", line 15, in <module>
    print calendar.monthrange(cYfDateY + ',' + cYfDateM)
TypeError: monthrange() takes exactly 2 arguments (1 given)
回溯(最近一次呼叫最后一次):
文件“/home/pi/SystemChecker.py”,第15行,在
打印日历。蒙特兰奇(cYfDateY+','+cYfDateM)
TypeError:monthrange()只接受2个参数(给定1个)
我不明白为什么它告诉我只有一个参数,而显然有两个参数。

calendar.monthrange()
有两个参数,
year
month
。有关更多详细信息,请查看此处的文档:


眼前的问题是
monthrange
需要两个参数;但是出于某种原因,您正在获取您拥有的两个参数,并将它们都连接到一个字符串中。不要那样做;只需传递参数:

calendar.monthrange(cYfDateY, cYfDateM)
不过,剧本的其余部分也很奇怪。您正确地计算了昨天的日期,但随后将其转换为字符串,然后使用第三方
箭头
库从该字符串中获取月份和日期。这甚至不起作用,因为这些现在是字符串。你为什么这么做?为什么不直接得到你已经拥有的月份和日期呢

yesterday = date.today() - timedelta(1)   
cYfDateY = yesterday.year
cYfDateM = yesterday.month

更改
打印日历。蒙特兰奇(cYfDateY+,'+cYfDateM)[1]


要打印calendar.monthrange(cYfDateY,cYfDateM)[1]

错误很明显,您需要传递2个参数,而不是1个参数。我当时还没有得到:cYfDateY&cYfDateM?就像
calendar.monthrange(cYfDateY,cYfDateM)
检查我下面答案中的链接以了解更多详细信息。我刚刚尝试删除
+,“+
在你回答之前意识到我的愚蠢,doh,但现在我得到了一个糟糕的月错误“11”,应该在1-12之间,我还以为11在1-12之间?我的道歉,python新手,仍在学习。我曾在其他地方使用过arrow模块,使用起来很舒服,但不知道有更快、更短的方法。谢谢,我盯着它看了将近一个小时后才意识到我的愚蠢错误,doh