ValidationError or TypeError, ValueError - Exceptions

may picture may · Feb 8, 2019 · Viewed 7.5k times · Source

I am quite a newbie understanding of how to catch exceptions in python. I have a question regarding those two types of ways of catching exceptions. I only found useful information about ValidationError regarding here

But I did not quite understand if it can be used besides django or what are the error messages that I can expect about it. I saw this code sample regarding the validation of types.

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

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

So for TypeError and ValueError for me, it is clear:

exception ValueError

Raised when an operation or function receives an argument that has the right type but an inappropriate value, and the situation is not described by a more precise exception such as IndexError.

exception TypeError

Raised when an operation or function is applied to an object of inappropriate type. The associated value is a string giving details about the type mismatch.

In conclusion, I am trying to understanding what would be the advantage of the second code with ValidationError, but it could be tricky as I did not find good documentation about. If someone could share knowledge about ValidationError, I would highly appreciate,

I am raising this question because I am going to use related library and I have not seen the exceptions being treated like this.

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

Thank you community!

Answer

Anonymous picture Anonymous · Feb 8, 2019

Python exceptions can be caught in this way:

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

OR LIKE THIS

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

You are simply handling multiple exceptions together. You can always split them. They are not 2 different ways. In your case the as is for logging it .

Here are a few examples:

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>

In the last case it catches exception of any type since no type is specified.
In Python programs can raise any exception for anything.
In fact exception is just a special class, even you can create one for your library.

So the best way to find about the exception is to read the docs of the library not the exception class.

If your program catches the exception and wants more detail about it for creating a log file the code can be written like this.

except TypeError as e:
    i=str(e)

In this case you are catching the exception and converting its detail to a string.
This is from the Django docs about the error which you are talking about.

Form validation happens when the data is cleaned. If you want to customize this process, there are various places to make changes, each one serving a different purpose. Three types of cleaning methods are run during form processing. These are normally executed when you call the is_valid() method on a form. There are other things that can also trigger cleaning and validation (accessing the errors attribute or calling full_clean() directly), but normally they won’t be needed.

In general, any cleaning method can raise ValidationError if there is a problem with the data it is processing, passing the relevant information to the ValidationError constructor. See below for the best practice in raising ValidationError. If no ValidationError is raised, the method should return the cleaned (normalized) data as a Python object.

Some further references:

The link to docs
This link has info about other common builtin exception classes.