Handling errors
Contents
Handling errors#
Programming for Geoscientists Data Science and Machine Learning for Geoscientists
When an error occurs in Python, an exception is raised.
Error types#
The full list of built-in exceptions is available in the documentation.
For example, when we create a tuple with only four elements and want to print the 5th element, we get this error message:
flower_names = ("iris", "poppy", "dandelion", "rose")
print(flower_names[4])
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-2-3497b57dd596> in <module>
4 "rose")
5
----> 6 print(flower_names[4])
IndexError: tuple index out of range
IndexError
refers to incorrect index, such as out of bounds.
Raising errors#
In-built functions trigger or raise
errors in Python. We can do that as well by using raise:
raise ValueError
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-5-e4c8e09828d5> in <module>
----> 1 raise ValueError
ValueError:
Catching errors#
Try and except blocks#
To handle errors in the code gracefully, we can use try
and except
blocks to avoid unnecessary crashes of the program. The try
block executes the program and if the program fails, exception is raised and we can recover from the error. This is especially useful if we do not want our program to crash (imagine YouTube crashing!). The syntax is:
try:
# some code
except ExceptionName1:
# code to be executed if ExceptionName1 is raised
except ExceptionName2:
# code to be executed if ExceptionName2 is raised
…
except:
# lines to execute if there was an exception not caught above
else:
# lines to execute if there was no exception at all
else
is optional, at least one except
needs to be raised. An example code below:
a = "ten"
# Try to create a number out of a string
try:
float(a)
# Raise an error if characters are not numbers
except ValueError:
print("ValueError.\nPlease use digits in your string.")
ValueError.
Please use digits in your string.
Exercises#
Identify which errors will be thrown in the following code samples (without running it!):
s += 1
s = [1,0,1,3,2,4]
s[9]
"str" + 7
[0]*(2**5000)
Answer
NameError
IndexError
TypeError
OverflowError
Types are gone! Say we have a list:
l = [1, True, 4, "blob", "boom", 5, 6, print]
Compute the sum of the numerical elements of the list (do not use the type()
function!). Is the sum what you expected? Do you notice anything interesting regarding the boolean constants?
HINT: Consider using a pass
statement in the except
block which circumvents (ignores) the raised error and continues the execution.
Answer
l = [1, True, 4, "blob", "boom", 5, 6, print]
res = 0
for element in l:
try:
res += element
except TypeError:
pass
print(res)