Я пытаюсь преобразовать данный месяц в число месяца в целочисленном формате. Есть три допустимых формата, которые я хочу попробовать преобразовать. Номер месяца, который указан в виде строки (функция ввода возвращает строку), сокращение месяца и полное название месяца.
Хотя моя функция работает как задумано, я чувствую, что она написана не так хорошо, несмотря на мои попытки сделать ее как можно более чистой. В частности, я не рад тому, что у меня есть заявление об исключении, которое просто проходит. Обработка как преобразования строки в целое число, так и проверка того, является ли строка допустимым месяцем для преобразования в целое число, была сложной задачей.
Я попытался изменить порядок try-excepts, удалив строку-to-int, чтобы она была в блоке try-Кроме, не углубляясь в форматирование даты в исключении, но это все. Функция ниже - лучшая попытка, которую я имел. Я не мог думать ни о чем другом, кроме, может быть, создать вспомогательные функции?
Код
def get_start_month_updated():
date_formats = ['%b', '%B']
while True:
month = input("What is the starting month?")
try:
month_num = int(month)
if 1 <= month_num <= 12:
return month_num
except ValueError:
for date_format in date_formats:
try:
month_num = strptime(month, date_format).tm_mon
return month_num
except ValueError:
pass
else:
print("You must enter a valid month")
else:
print("You must enter a valid month")
Мои результаты верны, и функция работает, как задумано, но я чувствую, что код запутан, и есть лучший способ сделать это, не запутавшись.