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

Error when using variable in Python calendar.monthrange

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

我有一个脚本,在每个月的 1 日通过 cron 运行s,并且需要 return 上个月的天数。 我还使用箭头模块更好地处理和格式化我在整个脚本中使用的任何 date/time 调用。

因为我需要找到上个月的天数,从脚本运行之日起仅倒退一天运行我只是通过 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)

我不明白为什么明明有两个参数却告诉我只有一个参数。

calendar.monthrange() 接受 2 个参数,yearmonth。查看此处的文档以获取更多详细信息:

calendar.monthrange(year, month)

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

calendar.monthrange(cYfDateY, cYfDateM)

不过,脚本的其余部分也很奇怪。您正确计算了昨天的日期,但随后将其转换为字符串,然后使用第三方 arrow 库从该字符串中获取月份和日期。这甚至行不通,因为它们现在是字符串。你为什么做这个?为什么不只获取您已有的月份和日期?

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

改变print calendar.monthrange(cYfDateY + ',' + cYfDateM)[1]
打印 calendar.monthrange(cYfDateY, cYfDateM)[1]