繁体   English   中英

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

[英]Error when using variable in Python calendar.monthrange

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

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

因为我需要找到上个月的天数,而该天距离脚本运行的日期只有一天了,所以我只需通过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(年,月)

眼前的问题是, 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM