Ошибка при использовании переменной в Python calendar.monthrange
Я пытаюсь напечатать количество дней в месяце, используя Python calendar.monthrange
функция.
У меня есть скрипт, который запускается через cron 1-го числа каждого месяца, и мне нужно возвращать количество дней с предыдущего месяца. Я также использую модуль стрелок, чтобы лучше обрабатывать и форматировать любые вызовы даты / времени, которые я использую в своих сценариях.
Поскольку мне нужно найти количество дней в предыдущем месяце, которое составляет всего один день с даты запуска сценария, я просто вычитаю 1 один с помощью timedelta.
Вот очень сокращенная версия моего кода, но это рабочая часть:
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)
Я не могу понять, почему это говорит мне, что есть только один аргумент, когда там явно два аргумента.
3 ответа
Непосредственная проблема заключается в том, что 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]
calendar.monthrange()
принимает 2 аргумента, year
а также month
, Проверьте документацию здесь для более подробной информации: