Python Academy · Lesson

try / except / else / finally

Structure exception-handling blocks for any scenario.

Lesson 2 of 414 steps

try / except / else / finally is a free Python Academy lesson on CoddyKit. This is lesson 2 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Python Academy learning path, and your progress syncs across the web and the CoddyKit app. The Python Academy course includes 4 lessons in total.

Introduction

Python's try/except/else/finally gives you complete control over error handling and cleanup.

Basic try/except

try: risky_code() except ExceptionType: handle() — Python executes the except block only when that exception type is raised.
try:
    x = int('abc')
except ValueError:
    print('not a number')

Catching the Exception Object

except ValueError as e: binds the exception to e. Use str(e) or e.args to get the message.
try:
    int('oops')
except ValueError as e:
    print(f'Error: {e}')

Catching Multiple Exceptions

except (TypeError, ValueError) as e: catches either type.
for val in ['abc', None, 42]:
    try:
        print(int(val))
    except (TypeError, ValueError) as e:
        print(f'skipping {val!r}: {e}')

Bare except (avoid it)

except: (no type) catches EVERYTHING including KeyboardInterrupt and SystemExit. Almost always a mistake — always specify types.
try:
    risky = 1/0
except ZeroDivisionError:
    print('division error')  # specific

Multiple except Clauses

You can have multiple except blocks, each handling a different type. Python tries them in order.
def process(val):
    try:
        return 10 / int(val)
    except ValueError:
        print('not a number')
    except ZeroDivisionError:
        print('division by zero')
process('abc')
process('0')

else Clause

try/except/else: the else runs only if NO exception was raised. Use for code that should run on success.
try:
    x = int('42')
except ValueError:
    print('bad input')
else:
    print('parsed:', x)

finally Clause

finally: runs ALWAYS — after try succeeds, after except, even after return or break. Perfect for cleanup.
def read_file(path):
    f = None
    try:
        f = open(path)
        return f.read()
    except FileNotFoundError:
        return None
    finally:
        if f: f.close()
print(read_file('/nonexistent'))

finally with return

If both a return and a finally exist, the finally runs first but the return value from finally wins. Be careful.
def demo():
    try:
        return 'try'
    finally:
        return 'finally'  # overrides!
print(demo())

Nested try Blocks

try blocks can be nested. An inner exception propagates outward if not caught by the inner except.
try:
    try:
        x = 1/0
    except ValueError:
        print('inner')
except ZeroDivisionError:
    print('outer caught it')

Logging Exceptions

import logging; logging.exception('msg') logs the full traceback. Perfect in production code.
import logging
try:
    1/0
except ZeroDivisionError:
    logging.exception('Caught an error')

Quick Check

Which clause runs regardless of whether an exception occurred?

Recap

try/except catches errors. else runs on success. finally always runs (cleanup). Catch specific types; avoid bare except. Use as e to access the exception.

Keep Going

Great work! Move on to the next lesson to keep progressing.
Free to start

Learn Python with an AI tutor — free

Write and run real code in your browser, get instant help from a 24/7 AI tutor, and pick up where you left off on the web or in the app.

Courses
76
Lessons
320

Frequently Asked Questions

Is the “try / except / else / finally” lesson free?

Yes — the full text of “try / except / else / finally” is free to read here on the web. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Python Academy course, upgrade to CoddyKit PRO. The Python Academy course includes 4 lessons in total.

What will I learn in “try / except / else / finally”?

Structure exception-handling blocks for any scenario. You practise Python Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.

Do I need any experience to start Python Academy?

No prior experience is required. Python Academy on CoddyKit is structured for beginners through advanced learners, so you can start here or from the beginning and move at your own pace. This is lesson 2 of 4.

How long does the “try / except / else / finally” lesson take?

Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.

Can I write and run code in this Python Academy lesson?

Yes. Every Python Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.

All lessons in this course

  1. Understanding Exceptions
  2. try / except / else / finally
  3. Raising and Re-raising Exceptions
  4. Custom Exception Classes
← Back to Python Academy