A NullReferenceException
бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.
Например:
string str = string.Empty;
str.ToLower(); // throw null reference exception
Public Class Person {
public string Name { get; set; }
}
Person objPerson;
objPerson.Name /// throw Null refernce Exception
Создание обратного словаря было бы разумным способом сделать это, потому что это довольно просто:
import calendar
dict((v,k) for k,v in enumerate(calendar.month_abbr))
или в последних версиях Python (2.7+), которые поддерживают понимание словаря:
{v: k for k,v in enumerate(calendar.month_abbr)}
Использование модуля calendar :
Число-в-Abbr calendar.month_abbr[month_number]
Abbr-to-Number list(calendar.month_abbr).index(month_abbr)
Вот еще один способ сделать это.
monthToNum(shortMonth):
return{
'Jan' : 1,
'Feb' : 2,
'Mar' : 3,
'Apr' : 4,
'May' : 5,
'Jun' : 6,
'Jul' : 7,
'Aug' : 8,
'Sep' : 9,
'Oct' : 10,
'Nov' : 11,
'Dec' : 12
}[shortMonth]
month_cal = dict((v,k) for v,k in zip(calendar.month_abbr[1:], range(1, 13)))
, а затем month_cal[shortMonth]
– Matt W.
12 July 2018 в 17:29
Вот более полный метод, который также может принимать полные имена месяцев
def month_string_to_number(string):
m = {
'jan': 1,
'feb': 2,
'mar': 3,
'apr':4,
'may':5,
'jun':6,
'jul':7,
'aug':8,
'sep':9,
'oct':10,
'nov':11,
'dec':12
}
s = string.strip()[:3].lower()
try:
out = m[s]
return out
except:
raise ValueError('Not a month')
пример:
>>> month_string_to_number("October")
10
>>> month_string_to_number("oct")
10
Еще одно:
def month_converter(month):
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
return months.index(month) + 1
Просто для удовольствия:
from time import strptime
strptime('Feb','%b').tm_mon
Источник информации: Документы Python
Чтобы получить номер месяца из имени месяца, используйте модуль datetime
import datetime
month_number = datetime.datetime.strptime(month_name, '%b').month
# To get month name
In [2]: datetime.datetime.strftime(datetime.datetime.now(), '%a %b %d, %Y')
Out [2]: 'Thu Aug 10, 2017'
# To get just the month name, %b gives abbrevated form, %B gives full month name
# %b => Jan
# %B => January
dateteime.datetime.strftime(datetime_object, '%b')
Чтобы получить имя месяца с использованием номера месяца, вы можете использовать time
:
import time
mn = 11
print time.strftime('%B', time.struct_time((0, mn, 0,)+(0,)*6))
'November'
<calendar._localized_month instance at 0x0164C9E0>
. Исходная версия кода Дэвида создала синтаксические ошибки в 2.6 и 3.1 - обе потребности()
вокруг v, k и оба требуют перечисления для calendar.month_abbr, которые я исправил. – Wayne Werner 5 August 2010 в 20:09