Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 23, 2013 20:44:28

fobiasmog
Зарегистрирован: 2013-11-11
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование try except

Всем привет!
Мне очень часто нужно в GET параметрах передавать числовые значения. В связи с этим вопрос: как лучше всего проверить число мне пришло или нет.

Пока что использую конструкцию:

try:
    int(x)
except:
    return None

Второй вопрос: использование try-except это хорошая практика?

Офлайн

#2 Ноя. 23, 2013 21:57:50

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Использование try except

Зачем?

request.GET['name']

выдаст Вам KeyError без лишних усилиий



Отредактировано FishHook (Ноя. 23, 2013 21:58:20)

Офлайн

#3 Ноя. 23, 2013 21:59:55

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Использование try except

def toint(n,default=0):
    try:
        return int(n)
    except ValueError:
        return default

Обновил как-бы

Отредактировано Singularity (Ноя. 23, 2013 23:16:50)

Офлайн

#4 Ноя. 23, 2013 22:56:00

fobiasmog
Зарегистрирован: 2013-11-11
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование try except

FishHook
Singularity
Спасибо, а что на счёт второго вопроса?

Офлайн

#5 Ноя. 23, 2013 23:11:07

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Использование try except

fobiasmog
Спасибо, а что на счёт второго вопроса?
Вы должны понимать, для чего Вы что-то делаете. Естественно, перехват исключений и их обработка - это нормальная практика,
но Вы меня простите, я не понимаю чем это Ваш код
except:
    return None
может быть полезен в веб-программировании. Какой смысл то?
Вы хотите вместо response вернуть None или кому этот None Вы пытаетесь отдать и в какое место?



Отредактировано FishHook (Ноя. 23, 2013 23:12:19)

Офлайн

#6 Ноя. 24, 2013 01:44:42

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Использование try except

FishHook
я не понимаю чем это Ваш код…
может быть полезен в веб-программировании. Какой смысл то?
Зависит же от задачи.
Бывают задачи,в которых можно использовать дефолтные значения, а бывают, что нельзя.
Причем, второе очень часто встречается в финансовой сфере.
fobiasmog
Второй вопрос: использование try-except это хорошая практика?
Для проверок значений - нет.
Эта конструкция очень затратна. Поэтому лучше использовать явные проверки, даже если их несколько.



Офлайн

#7 Ноя. 24, 2013 01:57:01

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Использование try except

Lexander
явные это как ? у нас же строка на входе

Офлайн

#8 Ноя. 24, 2013 05:33:13

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Использование try except

Singularity
Lexander явные это как ? у нас же строка на входе
'123'.isdigit()
?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#9 Ноя. 24, 2013 13:28:49

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Использование try except

Singularity
явные это как ?
Явные - это прямым вызовом проверяющих функций и сравнений.
пример выше написал JOHN_16

Чувствую, надо бы дать расширенное пояснение.
Сами по себе try-except, конечно, не есть зло.
Но нужно аккуратно с ними обращаться и понимать суть происходящего.
К тому же не всякая попытка преобразования выдаст исключение.
Например, float('nan') исключения не выдаст. А еще сюда можно написать определенные символы Юникода, которые исключения не вызовут тоже.

Когда исключения нельзя использовать?
Во время обучения (когда еще нет понимания что происходит внутри) и для простых проверок.
Судя по сообщению автора топика, этот как раз наш случай.

Появляется ли смысл использовать try-except когда проверок становится много или они становятся сложными? Все еще нет. Теперь самое время обратить внимание на модули валидации, коих полно в интернете.
Внутри этих модулей почти наверняка будут использоваться try-except.
Дело в другом - это еще не тот случай, когда пора писать свой велосипед.
Поэтому лучше использовать готовое решение.

И только тогда, когда вы вышли за пределы возможностей используемого модуля валидации данных, его можно расширить и в своем коде использовать try-except как минимум для унификации обработки таких ситуаций. Т.е. есть польза в долгосрочной перспективе в процессе поддержки проекта.



Офлайн

#10 Ноя. 24, 2013 13:32:21

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Использование try except

Кстати, ближе к примеру автора:
int(1.23) исключения тоже не выдаст, вернет 1.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version