Для API, который я пишу, я хотел бы написать метод 'check_params', который гарантирует, что аргументы, передаваемые в теле запроса http-post, могут быть соответствующим образом типизированы.
Например, предположим, что я передаю аргумент 'широта'.
Тогда
'latitude'='thisisnotafloat'
должно выдавать ошибку, а
'latitude'='43.21'
не должно выдавать ошибку.
Для обработки нескольких аргументов, есть что-то не так с созданием словаря с типами в качестве значений:
required_types = {
'arg1':str,
'arg2':int,
'arg3':str,
'arg4':float
}
, а затем выполнение утки (для упрощения вопроса предположим, что я обрабатываю случай, когда требуемый аргумент вообще не передается, а проверка типа происходит только после проверки существования).
for arg, type_ in required_types.iteritems():
try:
type_(self.get_argument(arg)) #using tornado here to get body arg
except:
handle_invalid_type_error()
Кроме того, я мог бы хранить типы в виде строк и использовать функцию eval ().
Например,
required_types = {
'arg1':'str',
'arg2':'int',
'arg3':'str',
'arg4':'float'
}
for arg, type_ in required_types.iteritems():
try:
eval(type_)(self.get_argument(arg)) #using tornado here to get body arg
except:
handle_invalid_type_error()
Здесь есть явный победитель? Или другой превосходный подход?