Learn Python – Python Exception- Basic and advance

An exception can be described as an unusual circumstance in a application ensuing in the interruption in the float of the program.

Whenever an exception occurs, the application stops the execution, and therefore the in addition code is now not executed. Therefore, an exception is the run-time errors that are unable to deal with to Python script. An exception is a Python object that represents an error

Python gives a way to take care of the exception so that the code can be completed barring any interruption. If we do no longer take care of the exception, the interpreter does not execute all the code that exists after the exception.

Python has many built-in exceptions that enable our program to run barring interruption and supply the output. These exceptions are given below:

Common Exceptions

Python provides the wide variety of built-in exceptions, however right here we are describing the common widespread exceptions. A list of frequent exceptions that can be thrown from a general Python software is given below.

ZeroDivisionError: Occurs when a number is divided by zero.
NameError: It occurs when a name is not found. It may be local or global.
IndentationError: If incorrect indentation is given.
IOError: It occurs when Input Output operation fails.
EOFError: It occurs when the end of the file is reached, and yet operations are being performed.

The problem without handling exceptions

As we have already discussed, the exception is an unusual situation that halts the execution of the program.

Suppose we have two variables a and b, which take the enter from the consumer and perform the division of these values. What if the consumer entered the zero as the denominator? It will interrupt the program execution and through a ZeroDivision exception. Let’s see the following example.

Example

a = int(input("Enter a:"))    
b = int(input("Enter b:"))    
c = a/b  
print("a/b = %d" %c)    
    
#other code:    
print("Hi I am other part of the program")  

Output:

Enter a:10
Enter b:0
Traceback (most recent call last):
  File "exception-test.py", line 3, in <module>
    c = a/b;
ZeroDivisionError: division by zero

The above program is syntactically correct, but it through the error due to the fact of uncommon input. That variety of programming may additionally now not be appropriate or encouraged for the projects because these tasks are required uninterrupted execution. That’s why an exception-handling performs an imperative function in dealing with these unexpected exceptions. We can manage these exceptions in the following way.

Exception handling in python

The try-expect statement

If the Python program includes suspicious code that may throw the exception, we have to area that code in the strive block. The attempt block ought to be followed with the besides statement, which contains a block of code that will be finished if there is some exception in the try block.

Syntax

try:    
    #block of code     
    
except Exception1:    
    #block of code    
    
except Exception2:    
    #block of code    
    
#other code    

Consider the following example.

Example 1

try:  
    a = int(input("Enter a:"))    
    b = int(input("Enter b:"))    
    c = a/b  
except:  
    print("Can't divide with zero")  

Output:

Enter a:10
Enter b:0
Can't divide with zero

We can additionally use the else assertion with the try-except statement in which, we can location the code which will be performed in the state of affairs if no exception happens in the strive block.

The syntax to use the else declaration with the try-except assertion is given below.

try:    
    #block of code     
    
except Exception1:    
    #block of code     
    
else:    
    #this code executes if no except block is executed    

Consider the following program.

Example 2

try:    
    a = int(input("Enter a:"))    
    b = int(input("Enter b:"))    
    c = a/b  
    print("a/b = %d"%c)    
# Using Exception with except statement. If we print(Exception) it will return exception class  
except Exception:    
    print("can't divide by zero")    
    print(Exception)  
else:    
    print("Hi I am else block")     

Output:

Enter a:10
Enter b:0
can't divide by zero
<class 'Exception'>

The except statement with no exception

Python presents the flexibility now not to specify the name of exception with the exception statement.

Consider the following example.

Example

try:    
    a = int(input("Enter a:"))    
    b = int(input("Enter b:"))    
    c = a/b;    
    print("a/b = %d"%c)    
except:    
    print("can't divide by zero")    
else:    
    print("Hi I am else block")     

The besides statement using with exception variable

We can use the exception variable with the barring statement. It is used with the aid of the usage of the as keyword. this object will return the purpose of the exception. Consider the following example:

try:    
    a = int(input("Enter a:"))    
    b = int(input("Enter b:"))    
    c = a/b  
    print("a/b = %d"%c)    
    # Using exception object with the except statement  
except Exception as e:    
    print("can't divide by zero")    
    print(e)  
else:    
    print("Hi I am else block")     

Output:

Enter a:10
Enter b:0
can't divide by zero
division by zero

Points to remember

Python facilitates us to not specify the exception with the except statement.
We can declare multiple exceptions in the except statement since the try block may contain the statements which throw the different type of exceptions.
We can also specify an else block along with the try-except statement, which will be executed if no exception is raised in the try block.
The statements that don't throw the exception should be placed inside the else block.

Example

try:    
    #this will throw an exception if the file doesn't exist.     
    fileptr = open("file.txt","r")    
except IOError:    
    print("File not found")    
else:    
    print("The file opened successfully")    
    fileptr.close()    

Output:

File not found

Declaring Multiple Exceptions

The Python allows us to declare the a couple of exceptions with the without clause. Declaring multiple exceptions is beneficial in the instances where a strive block throws more than one exceptions. The syntax is given below.

Syntax

try:    
    #block of code     
    
except (<Exception 1>,<Exception 2>,<Exception 3>,...<Exception n>)    
    #block of code     
    
else:    
    #block of code    

Consider the following example.

try:      
    a=10/0;      
except(ArithmeticError, IOError):      
    print("Arithmetic Exception")      
else:      
    print("Successfully Done")       

Output:

Arithmetic Exception

The try…finally block

Python provides the elective sooner or later statement, which is used with the try statement. It is done no be counted what exception occurs and used to launch the external resource. The eventually block offers a assurance of the execution.

We can use the eventually block with the attempt block in which we can pace the crucial code, which should be completed earlier than the attempt assertion throws an exception.

The syntax to use the eventually block is given below.

Syntax

try:    
    # block of code     
    # this may throw an exception    
finally:    
    # block of code    
    # this will always be executed     

Example

try:    
    fileptr = open("file2.txt","r")      
    try:    
        fileptr.write("Hi I am good")    
    finally:    
        fileptr.close()    
        print("file closed")    
except:    
    print("Error")    

Output:

file closed
Error

Raising exceptions

An exception can be raised forcefully with the aid of the usage of the raise clause in Python. It is beneficial in in that scenario the place we need to increase an exception to end the execution of the program.

For example, there is a program that requires 2GB memory for execution, and if the software tries to occupy 2GB of memory, then we can raise an exception to end the execution of the program.

The syntax to use the elevate declaration is given below.

Syntax

raise Exception_class,<value>    

Points to remember

To raise an exception, the raise statement is used. The exception class name follows it.
An exception can be provided with a value that can be given in the parenthesis.
To access the value "as" keyword is used. "e" is used as a reference variable which stores the value of the exception.
We can pass the value to an exception to specify the exception type.

Example

try:    
    age = int(input("Enter the age:"))    
    if(age<18):    
        raise ValueError   
    else:    
        print("the age is valid")    
except ValueError:    
    print("The age is not valid")    

Output:

Enter the age:17
The age is not valid

Example 2 Raise the exception with message

try:  
     num = int(input("Enter a positive integer: "))  
     if(num <= 0):  
# we can pass the message in the raise statement  
         raise ValueError("That is  a negative number!")  
except ValueError as e:  
     print(e)  

Output:

Enter a positive integer: -5
That is a negative number!

Example 3

try:    
    a = int(input("Enter a:"))    
    b = int(input("Enter b:"))    
    if b is 0:    
        raise ArithmeticError  
    else:    
        print("a/b = ",a/b)    
except ArithmeticError:    
    print("The value of b can't be 0")  

Output:

Enter a:10
Enter b:0
The value of b can't be 0

Custom Exception

The Python permits us to create our exceptions that can be raised from the software and caught using the except clause. However, we advise you examine this area after touring the Python object and classes.

Consider the following example.

Example

class ErrorInCode(Exception):      
    def __init__(self, data):      
        self.data = data      
    def __str__(self):      
        return repr(self.data)      
      
try:      
    raise ErrorInCode(2000)      
except ErrorInCode as ae:      
    print("Received error:", ae.data)      

Output: