在 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 个参数,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]
我正在尝试使用 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 个参数,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]