except
clauseselse
clause and finally
keywordraise
keyword to raise an Exceptionassert
keyword as a sanity check# Example 1: An example of syntax Error (An unmatched bracket)
print(1/0))
File "/var/folders/1t/g3ylw8h50cjdqmk5d6jh1qmm0000gn/T/ipykernel_28236/3938186187.py", line 2 print(1/0)) ^ SyntaxError: unmatched ')'
Note that in case of a syntax error in your program, none of the statement is executed
# Example 2: An example of syntax Error (Incorrect Indentation)
1/0 # note this error is not raised
print('This will not be printed')
if True:
print("Hello")
File "/var/folders/1t/g3ylw8h50cjdqmk5d6jh1qmm0000gn/T/ipykernel_28236/2308473987.py", line 5 print("Hello") ^ IndentationError: expected an indented block
Note that in case of a syntax error in your program, none of the statement is executed
# Example 1: ZeroDivisionError is an exception that is raised when you perform a division by zero.
print(1/0)
--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) /var/folders/1t/g3ylw8h50cjdqmk5d6jh1qmm0000gn/T/ipykernel_28236/1355514053.py in <module> 1 # Example 1: ZeroDivisionError is an exception that is raised when you perform a division by zero. ----> 2 print(1/0) ZeroDivisionError: division by zero
# Example 2: IndexError is an exception that is raised when trying to access a list index out of range
mylist = [5, 33, 21]
print(mylist[8])
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) /var/folders/1t/g3ylw8h50cjdqmk5d6jh1qmm0000gn/T/ipykernel_28236/3576555205.py in <module> 1 # Example 2: IndexError is an exception that is raised when trying to access a list index out of range 2 mylist = [5, 33, 21] ----> 3 print(mylist[8]) IndexError: list index out of range
Let us suppose we have written a program that prompts the user to enter temperature in Farhenheit and converts it into Celsius and it is working perfectly fine
# Example 3: A program that prompts the user to enter temperature in Farhenheit and converts it into Celsius
# Seems to work perfectly fine
far = float(input("Enter Fahrenheit Temprature: "))
cel = (far - 32.0) * 5.0/9.0
print (cel)
Enter Fahrenheit Temprature: abc
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) /var/folders/1t/g3ylw8h50cjdqmk5d6jh1qmm0000gn/T/ipykernel_28236/445056864.py in <module> 2 # Seems to work perfectly fine 3 ----> 4 far = float(input("Enter Fahrenheit Temprature: ")) 5 cel = (far - 32.0) * 5.0/9.0 6 print (cel) ValueError: could not convert string to float: 'abc'
What happens if a user enter a string instead of a number
try block
and the instructions that handle the exception are written inside except block
.except block
will execute only in case, when the program encounters some error in the preceding try block
.ValueError
that is raised in above program# Example 1: Handle ValueError (if the user inputs a string instead of number)
try:
far = float(input("Enter Fahrenheit Temprature: "))
cel = (far - 32.0) * 5.0/9.0
print (cel)
# This block will exectue the program without any crash
except:
print("An error occurred")
print("GR8 going")
Enter Fahrenheit Temprature: abc An error occurred GR8 going
# Example 2: Three errors are there in the try block: ZeroDivisionError, NameError, and TypeError
# A try clause is executed up until the point, where the first exception is encountered
try:
# z = 45 / 0
# print(z)
a = 34 + 'hello'
# This block will exectue the program without any crash
except:
print("An error occurred")
An error occurred
The above example of try-except statement is good as it is simple and can catch all types of exception. However, it does not help the programmer identify the root cause of the problem
- When an exception occurs the appropriate Exception class object is sent to the
except
clause, that we can receive as an argument.except Exception as e:
- The Exception class object received contains additional information about the raised exception, so as to handle it accordingly.
# Example code that specifies the type of exception raised
try:
#z = 45 / 0
# print(z)
a = 34 + 'hello'
except Exception as e:
print("Exception occured: ", e)
Exception occured: unsupported operand type(s) for +: 'int' and 'str'
except
Clauses¶try:
# z = 45 / 0
#print(z)
#a = 34 + 'hello'
#list1 = [1, 5, 9]
#print(list1[3])
import kakamanna #ModuleNotFounderror
except ZeroDivisionError:
print("ZeroDivisionError Occurred and Handled")
except NameError:
print("NameError Occurred and Handled")
except TypeError:
print("TypeError Occurred and Handled")
except IndexError:
print("IndexError Occurred and Handled")
except ModuleNotFoundError:
print("ModuleNotFoundError Occurred and Handled")
ModuleNotFoundError Occurred and Handled
try-except
with else
Clause and finally
Keyword¶else
Clause¶else clause
is used if you want to execute a piece of code that should execute when no exception is raised.else clause
in the try-except block must be placed after all the except clauses.try:
list1 = [1, 5, 9]
print("List Elements are: ", list1)
5/0
except ZeroDivisionError:
print("ZeroDivisionError Occurred and Handled")
except NameError:
print("NameError Occurred and Handled")
except TypeError:
print("TypeError Occurred and Handled")
except IndexError:
print("IndexError Occurred and Handled")
else:
print("This will execute if try clause does not raise an exception")
List Elements are: [1, 5, 9] ZeroDivisionError Occurred and Handled
finally
Keyword¶finally clause
is used to execute a piece of code that must execute, whether the try-block
raise an exception or not.finally clause
in the try-except
block must be placed after all the except
clauses, even after the else
clause.try:
list1 = [1, 5, 9]
print("List Elements are: ", list1)
5/0
except ZeroDivisionError:
print("ZeroDivisionError Occurred and Handled")
except NameError:
print("NameError Occurred and Handled")
except TypeError:
print("TypeError Occurred and Handled")
except IndexError:
print("IndexError Occurred and Handled")
else:
print("This will execute if try clause does not raise an exception")
finally:
print("This will always be executed")
List Elements are: [1, 5, 9] ZeroDivisionError Occurred and Handled This will always be executed
raise
Keword to Raise an Exception¶raise
keyword is used to raise an exception.# Example 1: Raise an exception if x is negative and display an appropriate message to user as to what went wrong
age = -1
#age = 5
if age < 0:
raise Exception("x should not be negative. The value of age was {}".format(age))
print("Program continues as age is positive")
--------------------------------------------------------------------------- Exception Traceback (most recent call last) /var/folders/1t/g3ylw8h50cjdqmk5d6jh1qmm0000gn/T/ipykernel_28236/1228122984.py in <module> 3 #age = 5 4 if age < 0: ----> 5 raise Exception("x should not be negative. The value of age was {}".format(age)) 6 print("Program continues as age is positive") Exception: x should not be negative. The value of age was -1
#Example 2: Raise an exception if x is not a number and display an appropriate message
x = "hello"
#x = 5
if not type(x) is int:
raise TypeError("Only integers are allowed")
print("Program continues as x is a number")
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) /var/folders/1t/g3ylw8h50cjdqmk5d6jh1qmm0000gn/T/ipykernel_28236/3477007658.py in <module> 3 #x = 5 4 if not type(x) is int: ----> 5 raise TypeError("Only integers are allowed") 6 print("Program continues as x is a number") TypeError: Only integers are allowed
In above examples, when we used the
raise
keyword, whenever the condition evaluated to true, the exception was raised and our program crashed midway
assert
Keyword¶assert
statement.assert
statement is passed two comma separated arguments, the first is a condition, which if evaluates to False, the exception AssertionError
is raised and the second argument is passed to it.assert
statement as:
- testing an expression, and if the result is false, raise an exception (AssertionError).
- a sanity-check that you can turn on, or turn off when you are done with your testing of the program.
# Example 1:
age = -1
#age = 5
assert age > 0 , 'age should be positive'
print("Program continues as age is positive")
--------------------------------------------------------------------------- AssertionError Traceback (most recent call last) /var/folders/1t/g3ylw8h50cjdqmk5d6jh1qmm0000gn/T/ipykernel_28236/3921261554.py in <module> 2 age = -1 3 #age = 5 ----> 4 assert age > 0 , 'age should be positive' 5 print("Program continues as age is positive") AssertionError: age should be positive
#Example 2:
#x = "hello"
x = 5
assert type(x) is int, 'x must be integer'
print("Program continues as x is a number")
Program continues as x is a number
import sys
sys.platform
'darwin'
#Example 3:
import sys
assert('win32' in sys.platform), "This code runs only on Windows" # On Mac this will raise AssertionError
#assert('darwin' in sys.platform), "This code runs only on Mac" # On Mac this will succeed
print("Program continues...")
--------------------------------------------------------------------------- AssertionError Traceback (most recent call last) /var/folders/1t/g3ylw8h50cjdqmk5d6jh1qmm0000gn/T/ipykernel_28236/2705886563.py in <module> 1 #Example 3: 2 import sys ----> 3 assert('win32' in sys.platform), "This code runs only on Windows" # On Mac this will raise AssertionError 4 #assert('darwin' in sys.platform), "This code runs only on Mac" # On Mac this will succeed 5 AssertionError: This code runs only on Windows
Try answering the following questions to test your understanding of the topics covered in this notebook:
try
-except
statements in Python?try
-except
statements? Give an example.try
block?except
? Can you have multiple except
blocks under a single try
block?except
block to handle any type of exception?try
-except
inside a function with an example.