In computing and computer programming, exception handling is the process of responding to the occurrence of exceptions – anomalous or exceptional conditions requiring special processing.
Python has manybuilt-in exceptions that are raised when a program encounters an error, and most external libraries, like the popularRequests, include his owncustom exceptions that we will need to deal to.
You can’t divide by zero, that is a mathematical true, and if you try to do it in Python, the interpreter will raise the built-in exceptionZeroDivisionError:
>>>defdivide(dividend, divisor):...print(dividend/ divisor)...>>> divide(dividend=10, divisor=5)# 2>>> divide(dividend=10, divisor=0)# Traceback (most recent call last):# File "<stdin>", line 1, in <module># ZeroDivisionError: division by zeroLet’s say we don’t want our program to stop its execution or show the user an output he will not understand. Say we want to print a useful and clear message, then we need tohandle the exception with thetry andexcept keywords:
>>>defdivide(dividend, divisor):...try:...print(dividend/ divisor)...except ZeroDivisionError:...print('You can not divide by 0')...>>> divide(dividend=10, divisor=5)# 2>>> divide(dividend=10, divisor=0)# You can not divide by 0You can also handle multiple exceptions in one line like the following without the need to create multiple exception blocks.
>>>defdivide(dividend, divisor):...try:...if(dividend==10):... var='str'+1...else:...print(dividend/ divisor)...except(ZeroDivisionError, TypeError)as error:...print(error)...>>> divide(dividend=20, divisor=5)# 4>>> divide(dividend=10, divisor=5)# `can only concatenate str (not "int") to str` Error message>>> divide(dividend=10, divisor=0)# `division by zero` Error messageThe code inside thefinally section is always executed, no matter if an exception has been raised or not:
>>>defdivide(dividend, divisor):...try:...print(dividend/ divisor)...except ZeroDivisionError:...print('You can not divide by 0')...finally:...print('Execution finished')...>>> divide(dividend=10, divisor=5)# 5# Execution finished>>> divide(dividend=10, divisor=0)# You can not divide by 0# Execution finishedCustom exceptions initialize by creating aclass that inherits from the baseException class of Python, and are raised using theraise keyword:
>>>classMyCustomException(Exception):...pass...>>>raise MyCustomException# Traceback (most recent call last):# File "<stdin>", line 1, in <module># __main__.MyCustomExceptionTo declare a custom exception message, you can pass it as a parameter:
>>>classMyCustomException(Exception):...pass...>>>raise MyCustomException('A custom message for my custom exception')# Traceback (most recent call last):# File "<stdin>", line 1, in <module># __main__.MyCustomException: A custom message for my custom exceptionHandling a custom exception is the same as any other:
>>>try:...raise MyCustomException('A custom message for my custom exception')>>>except MyCustomException:...print('My custom exception was raised')...# My custom exception was raisedSubscribe to pythoncheatsheet.org
Join16,702+ Python developersin a two times a month and bullshit freepublication, full of interesting, relevant links.