ValidationError или TypeError, ValueError - Исключения - PullRequest
0 голосов
/ 08 февраля 2019

Я новичок в понимании того, как отлавливать исключения в python.У меня есть вопрос, касающийся этих двух типов способов ловли исключений.Я нашел только полезную информацию о ValidationError, касающуюся здесь

Но я не совсем понял, можно ли его использовать помимо django или какие сообщения об ошибках я могу ожидать об этом.Я видел этот пример кода относительно проверки типов.

except (TypeError, ValueError) as error:
            LOGGER.error('Error e.g.', exc_info=True)

except ValidationError:
            LOGGER.error('Error e.g', exc_info=True)

Так что для TypeError и ValueError для меня понятно:

исключение ValueError

Возникает при операции илиФункция получает аргумент, который имеет правильный тип, но недопустимое значение, и ситуация не описывается более точным исключением, таким как IndexError.

исключение TypeError

Raisedкогда операция или функция применяется к объекту неподходящего типа.Связанное значение представляет собой строку, содержащую сведения о несоответствии типов.

В заключение, Я пытаюсь понять, в чем преимущество второго кода с ValidationError, но это можетбыть хитрым, поскольку я не нашел хорошую документацию о.Если бы кто-то мог поделиться знаниями о ValidationError, я был бы очень признателен,

Я поднимаю этот вопрос, потому что собираюсь использовать связанную библиотеку, и я не видел, чтобы исключения обрабатывались таким образом.

https://pypi.org/project/related/

Спасибо, сообщество!

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Python-исключения могут быть перехвачены следующим образом:

try:
<your code>
except <Exception>:
    <CODE 2>

ИЛИ ЭТО КАК

try:
    <your code>
except(<exception1>,<exception2>):
    <Code to handle exception>

Вы просто обрабатываете несколько исключений вместе.Вы всегда можете разделить их.Это не 2 разных способа.В вашем случае это как для регистрации.

Вот несколько примеров:

try:
    <code>
except TypeError:
    <Code for handling exception>
except ValueError:
    <Code for handling exception>
except ValidationError:
    <Code for handling exception>
except:
    <Code for handling exception>

В последнем случае это ловит исключение любого типа, так как тип не указан.
В программах на python может возникать любое исключение для чего угодно.
На самом деле исключение - это просто специальный класс, даже вы можете создать его для своей библиотеки.

Итаклучший способ узнать об исключении - это прочитать документы библиотеки, а не класса исключения.

Если ваша программа перехватывает исключение и хочет получить более подробную информацию о нем для созданияВ лог-файл код можно записать так:

except TypeError as e:
    i=str(e)

В этом случае вы перехватываете исключение и преобразуете его детали в строку.
Это из djangoдокументы об ошибке, о которой вы говорите.

Проверка формы происходит при очистке данных.Если вы хотите настроить этот процесс, существуют различные места для внесения изменений, каждое из которых служит своей цели.Три типа методов очистки используются во время обработки формы.Обычно они выполняются, когда вы вызываете метод is_valid () в форме.Существуют и другие вещи, которые также могут инициировать очистку и проверку (доступ к атрибуту ошибок или прямой вызов full_clean ()), но обычно они не требуются.

В общем случае любой метод очистки может вызвать ValidationError, если существуетпроблема с данными, которые он обрабатывает, передавая соответствующую информацию в конструктор ValidationError.Ниже приведены рекомендации по повышению ошибки ValidationError.Если ошибка ValidationError не вызвана, метод должен вернуть очищенные (нормализованные) данные в виде объекта Python.

Надеюсь, это должно помочь
Ссылка на документы
Эта ссылка содержит информацию о других распространенных встроенных классах исключений.
Если этот ответ решит ваш вопрос, вы можете нажать галочку.

0 голосов
/ 08 февраля 2019

Это разные блоки кода для обработки разных исключений.

Однако в этом примере оба случая имеют одинаковую логику того, как они обрабатывают каждое исключение.

Это может иметь больше смысла, если мы разделим эти случаи на 3 различных блока кода:

except TypeError as error:
    LOGGER.error('Type error: ', exc_info=True);
except ValueError as error:
    LOGGER.error('Value error: ', exc_info=True);
except ValidationError error:
    LOGGER.error('Validation error: ', exc_info=True);

TypeError будет выдано при использовании неверного типа

ValueError будет выдано при использовании неправильного значения

ValidationError будет выдано припроверка не пройдена

Программа будет обрабатывать каждое исключение по-разному

...