---
title: Errors, Exceptions, and Robust Code
date: 2026-01-03T18:20:00Z
modified: 2026-01-04T20:18:22Z
permalink: "https://www.micheledpierri.com/python/errors-exceptions/"
type: page
status: publish
excerpt: ""
wpid: 2509
featured_image: "https://www.micheledpierri.com/wp-content/uploads/2026/01/Python_09.webp"
featured_image_alt: Children dressed in lab coats are studying a python
timestamp: 2026-01-04T20:18:22Z
tags: []
---

## Lesson Objectives

By the end of this lesson, you will be able to:

- Understand the difference between errors and exceptions
- Recognize the most common Python exceptions
- Handle errors using `try / except`
- Write safer and more robust analytical code

This lesson is crucial:

**real-world data is messy, and code must fail gracefully**.

---

## 1️⃣ Errors vs Exceptions

In Python:

- **Errors** indicate problems detected before execution (syntax errors)
- **Exceptions** occur during execution (runtime errors)

Example of a syntax error:

if x > 0
    print(x)

```
<span class="line"><span style="color: #FF79C6">if</span><span style="color: #F8F8F2"> x </span><span style="color: #FF79C6">></span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">0</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(x)</span></span>
<span class="line"></span>
<span class="line"></span>
```

Python cannot even start executing this code.

---

## 2️⃣ Runtime Errors (Exceptions)

Runtime errors happen while the program is running.

Example:

x = int("abc")

```
<span class="line"><span style="color: #F8F8F2">x </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">int</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">abc</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

Error raised:

ValueError

```
<span class="line"><span style="color: #8BE9FD; font-style: italic">ValueError</span></span>
<span class="line"></span>
<span class="line"></span>
```

The program stops unless the exception is handled.

---

## 3️⃣ Common Python Exceptions

Some exceptions appear frequently in analytical code:

- `ValueError` → wrong value type
- `TypeError` → incompatible types
- `ZeroDivisionError` → division by zero
- `FileNotFoundError` → missing file
- `IndexError` → invalid index access
- `KeyError` → missing dictionary key

Recognizing them saves **hours of debugging**.

---

## 4️⃣ Handling Exceptions with `try / except`

Basic structure:

try:
    x = int("abc")
except ValueError:
    print("Conversion failed")

```
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    x </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">int</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">abc</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #FF79C6">except</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">ValueError</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Conversion failed</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

What happens:

- Python tries to execute the `try` block
- if the specified exception occurs, the `except` block runs
- the program continues safely

---

## 5️⃣ Catching Multiple Exceptions

You can handle different exceptions separately:

try:
    x = int(input("Enter a number: "))
    y = 10 / x
except ValueError:
    print("Not a valid number")
except ZeroDivisionError:
    print("Division by zero is not allowed")

```
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    x </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">int</span><span style="color: #F8F8F2">(</span><span style="color: #8BE9FD">input</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Enter a number: </span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">))</span></span>
<span class="line"><span style="color: #F8F8F2">    y </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">10</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">/</span><span style="color: #F8F8F2"> x</span></span>
<span class="line"><span style="color: #FF79C6">except</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">ValueError</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Not a valid number</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #FF79C6">except</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">ZeroDivisionError</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Division by zero is not allowed</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

This pattern is common in data input validation.

---

## 6️⃣ The `else` and `finally` Blocks

### `else`

Runs only if no exception occurs:

try:
    x = int("10")
except ValueError:
    print("Error")
else:
    print("Success:", x)

```
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    x </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">int</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">10</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #FF79C6">except</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">ValueError</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Error</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #FF79C6">else</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Success:</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">, x)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### `finally`

Always runs, whether an exception occurred or not:

try:
    file = open("data.txt")
except FileNotFoundError:
    print("File missing")
finally:
    print("Operation completed")

```
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    file </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">open</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">data.txt</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #FF79C6">except</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">FileNotFoundError</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">File missing</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #FF79C6">finally</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Operation completed</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

Useful for cleanup operations.

---

## 7️⃣ When to Use Exception Handling

Use `try / except` when:

- dealing with external input
- reading files
- parsing data
- performing risky operations

Do **not** use it to hide programming errors.

Rule:

> Exceptions should handle expected problems, not mask bugs.

---

## 8️⃣ Error Handling in Data Analysis

In data workflows, exceptions help you:

- skip corrupted records
- validate input data
- prevent pipeline crashes
- log problems for later inspection

Robust pipelines anticipate failure.

---

## FAQ — Frequently Asked Questions

**Q: Should I wrap all code in try/except?**

A: No. Only wrap code that can reasonably fail.

**Q: Is catching `Exception` bad practice?**

A: Yes, unless you re-raise or log appropriately.

**Q: Can I create my own exceptions?**

A: Yes, but this is an advanced topic.

**Q: Do exceptions slow down code?**

A: Negligibly in normal use; clarity matters more.

---

## Exercises

### Exercise 1

Write code that raises a `ZeroDivisionError`.

### Exercise 2

Handle the error from Exercise 1 using `try / except`.

### Exercise 3

Convert user input to an integer safely.

### Exercise 4

Handle both `ValueError` and `ZeroDivisionError`.

### Exercise 5

Use `else` to print a success message.

### Exercise 6

Use `finally` to print `"Done"`.

### Exercise 7

Predict the output:

try:
    x = int("5")
except ValueError:
    print("Error")
else:
    print(x)

```
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    x </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">int</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">5</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #FF79C6">except</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">ValueError</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Error</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #FF79C6">else</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(x)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 8

Explain why this is bad practice:

try:
    x = 1 / 0
except:
    pass

```
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    x </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">1</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">/</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">0</span></span>
<span class="line"><span style="color: #FF79C6">except</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">pass</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 9

Write code that safely opens a file.

### Exercise 10

Explain why exception handling is critical in data analysis.

---

## Solutions

### Exercise 1

1 / 0

```
<span class="line"><span style="color: #BD93F9">1</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">/</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">0</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 2

try:
    1 / 0
except ZeroDivisionError:
    print("Cannot divide by zero")

```
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #BD93F9">1</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">/</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">0</span></span>
<span class="line"><span style="color: #FF79C6">except</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">ZeroDivisionError</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Cannot divide by zero</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 3

try:
    x = int(input("Enter a number: "))
except ValueError:
    print("Invalid input")

```
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    x </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">int</span><span style="color: #F8F8F2">(</span><span style="color: #8BE9FD">input</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Enter a number: </span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">))</span></span>
<span class="line"><span style="color: #FF79C6">except</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">ValueError</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Invalid input</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 4

try:
    x = int(input())
    y = 10 / x
except ValueError:
    print("Not a number")
except ZeroDivisionError:
    print("Division by zero")

```
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    x </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">int</span><span style="color: #F8F8F2">(</span><span style="color: #8BE9FD">input</span><span style="color: #F8F8F2">())</span></span>
<span class="line"><span style="color: #F8F8F2">    y </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">10</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">/</span><span style="color: #F8F8F2"> x</span></span>
<span class="line"><span style="color: #FF79C6">except</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">ValueError</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Not a number</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #FF79C6">except</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">ZeroDivisionError</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Division by zero</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 5

try:
    x = int("10")
except ValueError:
    print("Error")
else:
    print("Success")

```
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    x </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">int</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">10</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #FF79C6">except</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">ValueError</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Error</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #FF79C6">else</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Success</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

## Exercise 6

try:
    x = int("10")
finally:
    print("Done")

```
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    x </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">int</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">10</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #FF79C6">finally</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Done</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 7

# Output: 5

```
<span class="line"><span style="color: #6272A4"># Output: 5</span></span>
<span class="line"></span>
<span class="line"></span>
```

## Exercise 8

# It hides errors and makes debugging impossible

```
<span class="line"><span style="color: #6272A4"># It hides errors and makes debugging impossible</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 9

try:
    with open("data.txt", "r") as f:
        content = f.read()
except FileNotFoundError:
    print("File not found")

```
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">with</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">open</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">data.txt</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">, </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">r</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">) </span><span style="color: #FF79C6">as</span><span style="color: #F8F8F2"> f:</span></span>
<span class="line"><span style="color: #F8F8F2">        content </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> f.read()</span></span>
<span class="line"><span style="color: #FF79C6">except</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">FileNotFoundError</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">File not found</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 10

# Real data is messy; robust code prevents pipeline failures

```
<span class="line"><span style="color: #6272A4"># Real data is messy; robust code prevents pipeline failures</span></span>
<span class="line"></span>
<span class="line"></span>
```

---

## Next Lesson Preview

In **Lesson 10**, we will introduce:

- classes and objects
- `__init__` and instance attributes
- why OOP matters even in data-centric code

## This is where Python moves from scripts to **structured systems**.