2014-10-24 2 views
0

Я использую t = time.strptime() в моей программе Python и хочу проверить, не возвращает ли она действительную структуру.Возвращаемая стоимость от time.strptime()

Когда я программировал на C, я использовал для проверки возвращаемого значения NULL, чтобы указать, что был сделан недействительный вызов. Однако это не работает на Python. Я также проверил для not t и -1. То, что я пытаюсь сделать на этом этапе, - проверить, что пользователь не ввел недопустимое дата-время, не проверяя каждое поле отдельно для ошибок, таких как 31/02/2014 и т. Д.

Как проверить возвращаемое значение?

ответ

2

Python использует exceptions для обмена неверными вводами. Если time.strptime() не создает исключение, возвращаемое значение является правильным, и вам не нужно его проверять самостоятельно.

Если возбуждается исключение, вы можете поймать его с try...except заявление:

try: 
    t = time.strptime(userinput, format) 
except ValueError: 
    # exception raised, not valid input, give feedback to user 

Демо:

>>> import time 
>>> time.strptime('01/02/2014 10:42:36', '%d/%m/%Y %H:%M:%S') 
time.struct_time(tm_year=2014, tm_mon=2, tm_mday=1, tm_hour=10, tm_min=42, tm_sec=36, tm_wday=5, tm_yday=32, tm_isdst=-1) 
>>> time.strptime('31/02/2014 10:42:36', '%d/%m/%Y %H:%M:%S') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/mpietre/Development/Library/buildout.python/parts/opt/lib/python3.4/_strptime.py", line 494, in _strptime_time 
    tt = _strptime(data_string, format)[0] 
    File "/Users/mpietre/Development/Library/buildout.python/parts/opt/lib/python3.4/_strptime.py", line 465, in _strptime 
    datetime_date(year, 1, 1).toordinal() + 1 
ValueError: day is out of range for month 

Обратите внимание, что было брошено исключение здесь, потому что 31 выходит за пределы допустимых дней диапазона за февраль.

+0

Просмотрено в двух книгах Python и НЕ задокументировано. Проблема исправлена! – MichaelJohn