In [1]:
import numpy as np
An exception is an event, which occurs during the execution of a program, that disrupts the normal flow of the program's instructions.
You've already seen some exceptions in the Debugging lesson. *
Many programs want to know about exceptions when they occur. For example, if the input to a program is a file path. If the user inputs an invalid or non-existent path, the program generates an exception. It may be desired to provide a response to the user in this case.
It may also be that programs will generate exceptions. This is a way of indicating that there is an error in the inputs provided. In general, this is the preferred style for dealing with invalid inputs or states inside a python function rather than having an error return.
Python provides a way to detect when an exception occurs. This is done by the use of a block of code surrounded by a "try" and "except" statement.
In [17]:
def divide(numerator, denominator):
result = numerator/denominator
print("result = %f" % result)
In [18]:
divide(1.0, 0)
In [36]:
def divide1(numerator, denominator):
try:
result = numerator/denominator
print("result = %f" % result)
except:
print("You can't divide by 0!")
In [37]:
divide1(1.0, 0)
In [38]:
divide1(1.0, 2)
In [39]:
divide1("x", 2)
In [40]:
def divide2(numerator, denominator):
try:
result = numerator / denominator
print("result = %f" % result)
except (ZeroDivisionError, TypeError):
print("Got an exception: %s" % err)
In [41]:
divide2(1, "x")
In [42]:
divide2("x, 2)
In [46]:
# Handle division by 0 by using a small number
SMALL_NUMBER = 1e-3
def divide3(numerator, denominator):
try:
result = numerator/denominator
except ZeroDivisionError:
result = numerator/SMALL_NUMBER
print("result = %f" % result)
except Exception as err:
print("Different error than division by zero:", err)
In [48]:
divide3(1,0)
In [49]:
divide3("1",0)
In [51]:
import pandas as pd
def func(df):
""""
:param pd.DataFrame df: should have a column named "hours"
"""
if not "hours" in df.columns:
raise ValueError("DataFrame should have a column named 'hours'.")
In [52]:
df = pd.DataFrame({'hours': range(10) })
func(df)
In [54]:
df = pd.DataFrame({'years': range(10) })
func(df)
Choose one of the functions from the last exercise. Create two new functions:
%) throws an exception and attempts to correct it by coercing the argument to a positive integer.