coding180 icon
Error Handling in Python Functions

Error Handling in Python Functions

Home > Tutorials > Python for beginners > Functions

As a programmer, it's inevitable that you will encounter errors in your code. These errors can occur for various reasons, such as incorrect user inputs or unforeseen program behaviors. However, just because an error occurs doesn't mean your program has to come to a halt. In fact, handling errors effectively is a crucial part of writing robust and reliable code.

In this lesson, we'll cover the basics of error handling in Python functions, including understanding exceptions and how to handle them, using try-except blocks to catch and handle exceptions gracefully, raising your own exceptions, and creating custom error messages.

Understanding Exceptions

In Python, an exception is an event that occurs during the execution of a program that disrupts the normal flow of instructions. When an exception occurs, Python creates an object that contains information about the error, including its type and a message describing what went wrong.

Here's an example of an exception:

num_list = [1, 2, 3]

In this code, we're trying to print the value at index 3 in the num_list list. However, since num_list only has three elements (at indices 0, 1, and 2), this will result in an IndexError exception being raised. The error message will indicate that the list index is out of range.

Handling Exceptions with Try-Except Blocks

To handle exceptions in Python, we use a try-except block. The basic syntax looks like this:

    # some code that might raise an exception
except ExceptionType:
    # code to handle the exception

In this example, ExceptionType is the type of exception you want to catch. If an exception of that type is raised inside the try block, Python will jump to the except block and execute that code instead.

Here's an example of using a try-except block to catch the IndexError exception from earlier:

num_list = [1, 2, 3]

except IndexError:
    print("Oops! That index is out of range.")

In this code, we're trying to access an index that doesn't exist in the num_list list. However, since we've wrapped that code in a try block with an except block for IndexError, Python will execute the code inside the except block instead of raising an error and halting the program. The output will be "Oops! That index is out of range."

Raising Your Own Exceptions

Sometimes, you might want to raise your own exceptions to handle specific situations in your code. To do this, you can use the raise keyword followed by an instance of an exception type. Here's an example:

def divide(num1, num2):
    if num2 == 0:
        raise ZeroDivisionError("Cannot divide by zero!")
        return num1 / num2

In this code, we're defining a function called divide that takes two arguments: num1 and num2. Inside the function, we're checking if num2 is equal to zero. If it is, we're raising a ZeroDivisionError exception with a custom error message. Otherwise, we're returning the result of dividing num1 by num2.

Now, if we call the function with num2 equal to zero, we'll get an error message that says "Cannot divide by zero!" instead of a ZeroDivisionError message.


  1. Write a function that takes a string argument and raises a ValueError exception if the string contains any digits.
  2. Modify the divide function from earlier to raise a TypeError exception if either of the arguments is not a number.


In summary, error handling is an essential part of writing reliable and robust code in Python. By understanding exceptions, using try-except blocks to handle errors gracefully, and raising your own exceptions with custom error messages, you can ensure that your programs are able to recover from unexpected situations and continue running smoothly.


Robort Gabriel

Lagos, Nigeria

Freelance Web Developer, Native Android Developer, and Coding Tutor.

  • UI / UX
  • JavaScript
  • Python
  • PHP
  • Kotlin
  • Java
  • Bootrap
  • Android
  • Laravel