#Day14 - Exceptions in Python

#Day14 - Exceptions in Python

Today we will we talking about the Built-in Exceptions in Python.

Although you can catch any exception using the following syntax

try:
    # code
    pass
except Exception as e:
    # code
    pass

This is like a wild-card, i.e it can catch any exception. It is good for some cases, but assume you are building a UI or an API of some sort and want to give a more descriptive message to the user. You can handle specific exceptions as well. We will discuss a few of the common built-in exceptions below. We will discuss what they mean, look at examples that raise them and handle them using a try...except clause. Some of them are pretty self-explanatory but we will still go over them

ZeroDivisionError

Cause

This error is raised when we try to divide a number by 0.

print(10/0)

Error Message

ZeroDivisionError: division by zero

Handling the Error

try:
    print(10/0)
except ZeroDivisionError:
    print("Tried to divide a number by 0")

ImportError

Cause

This error is raised when we try to import a library or module which has not been installed or doesn't exist

import randomLibrary
from random import randomLibrary

Error Message

The first statement would cause the following error

ModuleNotFoundError: No module named 'randomLibrary'

The second statement would cause the following error

ImportError: cannot import name 'randomLibrary' from 'random'

Handling the Error

Both can be caught in the same way

try:
    from random import randomLibrary
except ImportError:
    print("Could not find Library/Module")

try:
    import randomLibrary
except ImportError:
    print("Could not find Library/Module")

FileNotFoundError

Cause

This error is raised when trying to open a file that doesn't exist

with open("nonExistingFile.txt") as f:
    print(f)

Error Message

FileNotFoundError: [Errno 2] No such file or directory: 'nonExistingFile.txt'

Handling the Error

try:
    with open("nonExistingFile.txt") as f:
        print(f)
except FileNotFoundError:
    print("Could not find the file")

Type Error

Cause

This error is raised when you use a built-in function on the wrong data type

var1 = 10
var2 = "string"
print(var1 + var2)

We are trying to add a string and an integer which raises a TypeError

Error Message

TypeError: unsupported operand type(s) for +: 'int' and 'str'

Handling the Error

try:
    var1 = 10
    var2 = "string"
    print(var1 + var2)
except TypeError:
    print("You tried an operation on different datatypes")

Assertion Error

Cause

This Error is raised by an assert statement in your code.

assert 10 == 0

When the expression is False, the error is raised

Error Message

AssertionError

Yup, that's it

Handling the Error

try:
    assert 10 == 0
except:
    print("Assertion Error Raised")

Attribute Error

Cause

This error is raised when a non-existent attribute of a class is referenced

class test:
    def __init__():
        print("Initialized")

print(test.func())

Error Message

AttributeError: type object 'test' has no attribute 'func'

Handling the Error

class test:
    def __init__():
        print("Initialized")

try:
    print(test.func())
except AttributeError:
    print("Attribute doesn't exist")

IndexError

Cause

This error is caused when you try to index a list with an index that doesn't exist or is out of range

lst = [1,2,3,4]
print(lst[5])

Error Message

IndexError: list index out of range

Handling the Error

try:
    lst = [1,2,3,4]
    print(lst[5])
except:
    print("Index is out of range")

KeyError

Cause

This is similar to the Index Error but is caused when a reference is made to a non-existent key of a dictionary

dictionary = {'key1': "value1"}
print(dictionary["key2"])

Error Message

KeyError: 'key2'

Handling the Error

try:
    dictionary = {'key1': "value1"}
    print(dictionary["key2"])
except:
    print("Key doesn't exist in dictionary")