Python Programming – Exception Handling

When an exception occurs, the current process stops and passes it to the calling process until it is handled to obtain the result. If not handled properly, the program crashes and the intended output is not obtained and the program comes to a halt.

Try, Except, and Finally

In Java, try and catch blocks are used to handle exceptions, in Python, exceptions can be handled using a try and except statements. A critical operation that can raise an exception is included in the try clause and the code for handling the exception is included in except clause. Consider a programming example in Code: 8.3. In this program, we see that the user is asked to input an integer number and then its reciprocal will be computed. In the output, we see that if the user enters a character or float (real) value then the ValueError exception occurs, which is caught by the except clause, and the appropriate error message “please try again” along with the exception is displayed to the user.

The while loop executes until the user supplies a valid integer value as an input for the computation of valid reciprocal. The critical portion that can cause exceptions is placed inside the try block. If there is no exception then programs execute with normal flow and if an error occurs then it is caught by the except clause. Therefore, we see exception occurs three times for inputting a, 1.5, and 0 and handled by the except block of the .program by providing value error and divide by zero error messages. The code ex info module is used to fetch the type of exception from the sys module. Therefore, the sys module is necessary to import into this program.

Code: 8.3. Illustration of Try and Except clauses.

# This program illustrates to handle exceptions using try and except clauses

import sys

while True:
try:
x = int(input(“Enter an integer:”))
r = 1/x
break
except:
print(“Oops!”,sys.exc_info()[0],”occured.”)
print(“Please try again.”)
print()

print(“The reciprocal of’,x,”is”,r)

Output

Enter an integer: a
Oops! <class ‘ValueError’>occured.
Please try again.

Enter an integer: 1.5
Oops! <class ‘ValueError’>occured.
Please try again.

Enter an integer: 0
Oops! <class ‘ZeroDivisionError’>occured.
Please try again.

Enter an integer: 5
The reciprocal of 5 is 0.2

Catching Specific Exceptions in Python

We can also handle exceptions separately rather than all exceptions in one block. In Python, a try clause can have multiple except clauses just like a try block can have multiple catch blocks in Java. Only one of them will be executed depending upon the type of occurred exception. The code for the same is illustrated in Code 8.4.

Code: 8.4. Illustration of multiple except clauses.

try:
# do something
passexcept ValueError:
# handle ValueError exception
passexcept (TypeError, ZeroDivisionError):
# handle multiple exceptions
# TypeError and ZeroDivisionError
pass

except:
# handle all other exceptions
pass

try…finally

As we have- seen that the try statement can have multiple except statements. Alike Java, Python also exhibits an optional clause ‘finally’. It gets executed automatically and is mostly used to release external resources. For example, while developing some large projects, we may be connected to a server on the network or to a file of GUI. Then in such situations, to release all the resources finally exception clause can be used. It will ensure that all resources are freed up to guarantee the successful execution of the program. The program illustrating the same is displayed in Code 8.5.

Code: 8.5. Illustration of finally clause.

try:
fp = open(“check.txt”,encoding = ‘utf-8’)
# perform file operations
finally:
fp.close()

Note: This type of construct makes sure the file is closed even if an exception occurs.

Python Programming – Exception Handling

While writing Python code, certain errors may occur. In the first place, these errors can prevent the program from being executed by the interpreter. These errors are called compile-time errors. For an instance, forgetting to follow the exact syntax of a particular construct such as if statement or making a spelling mistake, missing a semicolon or colon, may cause an interpreter/compile-time error. The program gets executed only after these errors are rectified. Let us consider a program given in Code 8.1. This program determines whether a number is even. In the if statement, we see that colon (:) is missing. The execution of this code raises a syntax error as presented in Fig. 8.1.

Code: 8,1, Illustration of interpreter time error (syntax error).

# This program illustrates syntax error 

number=input(‘Enter a number:’)
number=int(number)
if number%2==0
print(‘Number is even’)
print(‘out of if block’)

Python Programming - Exception Handling chapter 8 img 1

Exception

There exist some errors which occur at run time in the program. For instance, attempting to divide by zero or accessing a list, which is not defined, opening a file that does not exist are common examples of run time errors. The run time error is called an exception. By the occurrence of these errors, Python creates an exception object. If not handled properly, it prints a traceback to that error along with some details about why that error has occurred. For instance, consider a simple code given in code: 8.2. We see that there is no syntax error in this code, therefore it executes without any error. The output of this code is given in Fig. 8.2., We see if the user inputs the value of number as 0 then the expression c=15/number evaluates to c=15/0, then due to division by zero, zero division Error exception occurs and we don’t obtain the output.

Code: 8.2. Illustration of runtime error (Exception)

#This program illustrates run time error 

number=input(‘Enter a number)
number=int(number)
C=15/Number
Print(c)

Python Programming - Exception Handling chapter 8 img 2

Python Built-in Exceptions

python language detects exceptions if they occur during the exception of a program. There exists numerous built-in python exception listed in Table 8.1. with the description of each.

Exception Cause
AssertionError Raised when an assert statement fails.
AttributeError Raised when attribute assignment or reference fails.
EOFError Raised when the output( ) functions hit the end-of-file condition.
FloatingPointError Raised when a floating-point operation fails.
GeneratorExit Raise when a generator’s close( ) method is called.
ImportError Raised when the imported module is not found.
IndexError Raised when the index of a sequence is out of range.
KeyError Raised when a key is not found in a dictionary.
Keyboardlnterrupt Raised when the user hits the interrupt key (Ctrl+c or delete).
MemoryError Raised when an operation runs out of memory.
NameError Raised when a variable is not found in the local or global scope.
NotlmplementedError Raised by abstract methods.
OSError Raised when system operation causes the system-related error.
OverflowError Raised when the result of an arithmetic operation is too large to be represented.
ReferenceError Raised when a weak reference proxy is used to access a garbage collected referent.
RuntimeError Raised when an error does not fall under any other category.
Toleration Raised by next() function to indicate that there is no further item to be returned by the iterator.
SyntaxError Raised by the parser when a syntax error is encountered.
IndentationError Raised when there is incorrect indentation.
TabError Raised when indentation consists of inconsistent tabs and spaces.
SystemError Raised when interpreter detects an internal error.
SystemExit Raised by sys.exit() function.
TypeError Raised when a function or operation is applied to an object of incorrect type.
UnboundLocalError Raised when a reference is made to a local variable in a function or method, but no value has been bound to that variable.
UnicodeError Raised when a Unicode-related encoding or decoding error occurs.
UnicodeEncodeError Raised when a Unicode-related error occurs during encoding.
UnicodeDecodeError Raised when a Unicode-related error occurs during decoding.
UnicodeTranslateError Raised when a Unicode-related error occurs during translating.
ValueError Raised when a function gets argument of correct type but improper value.
ZeroDivisionError Raised when the second operand of division or modulo operation is zero.

Summary

In this chapter, we have discussed interpreting time errors (syntax errors) and run-time errors. Run time errors are also called exceptions. Various built-in exceptions are available in the Python language. However, the user can create their own exceptions for handling different circumstances, which can occur during the execution of the program. All exception handling constructs try, except, finally are discussed with the programming illustration of each of them. User-defined exceptions are also discussed with examples.

Python Tutorial

Leave a Reply

Your email address will not be published. Required fields are marked *