Найти - Пользователи
Полная версия: Использование try except
Начало » Django » Использование try except
1 2
fobiasmog
Lexander, спасибо. По сути задачи: эта проверка идёт в джанговской модели, перед запросом к базе. Делается для того, чтобы не обрабатывались запросы вида /?id=123abc.
Спасибо всем!
Lexander
fobiasmog
По сути задачи: эта проверка идёт в джанговской модели, перед запросом к базе.
Советую использовать готовый валидатор.
FishHook
fobiasmog
Lexander, спасибо. По сути задачи: эта проверка идёт в джанговской модели, перед запросом к базе. Делается для того, чтобы не обрабатывались запросы вида /?id=123abc.Спасибо всем!
Если передавать id, как это принято в Джанге,
url(r'^reports/(?P<id>\d+)/$', 'credit.views.report'),
то до запросов дело вообще не дойдет
cutwater
Lexander, int(1.23) не выдаст, а вот int('1.23') очень даже выдаст.

А вот Ваш пример с isdigit не покрывает всех случаев использования преобразования к int, ибо работает только подмножестве целых чисел, а именно работает только с положительными числами. Нет конечно можно сделать что-то по типу:

def is_integer(s):
    s = s.strip()
    if s[0] in "+-":
        s = s[1:]
    return s.isdigit()

А вот применимость в том или ином случае зависит от задачи.
Lexander
cutwater
Lexander, int(1.23) не выдаст, а вот int('1.23') очень даже выдаст.
Вы уводите от сути. Это софистика.
То, что я хотел написать, я написал. Если бы int('1.23'), допустим, не выдавал ошибки и я намеревался именно этот момент уточнить, я бы так и написал.
Цель была в другом: я показал 2 разных примера, когда ожидаемый результат отличается от фактического, и, как следствие, конструкция try-except не работает на уровне бизнес-логики, хотя работает на уровне синтаксиса.
cutwater
А вот Ваш пример с isdigit
У меня не было такого примера.
Тем не менее, в указанном контексте сообщения JOHN_16 (как один из примеров) он указан вполне корректно.
К вашему примеру никто ведь не придирается, а ведь есть за что ;)
cutwater
Эта конструкция очень затратна. Поэтому лучше использовать явные проверки, даже если их несколько.

Речь была о том, что проверки при помощи встроенных функций int, float и пример проверки при помощи isdigit ведут себя по-разному. Поэтому однозначно утверждать, что лучше использовать явные проверки нельзя, только потому что обработка исключений работает чуть медленней (~2-3 раза) чем простой разбор строки.

Однако, как Вы правильно заметили способ следует выбиртаь из задачи. Для валидации URL в большинстве случаев как раз таки проверка при помощи isdigit или regexp покрывает все необходимые случаи.

Производительность в данном конкретном случае не столь существенна на мой взгляд.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB