The `try` block lets you test a block of code for errors.
The `except` block lets you handle the error.
The `else` block lets you execute code when there is no error.
The `finally` block lets you execute code, regardless of the result of the try- and except blocks.
---
## Exception Handling
When an error occurs, or exception as we call it, Python will normally stop and generate an error message.
These exceptions can be handled using the `try` statement:
### Example
The `try` block will generate an exception, because `x` is not defined:
```python
try:
print(x)
except:
print("An exception occurred")
```
Since the try block raises an error, the except block will be executed.
Without the try block, the program will crash and raise an error:
### Example
This statement will raise an error, because `x` is not defined:
print(x)
---
## Many Exceptions
You can define as many exception blocks as you want, e.g. if you want to execute a special block of code for a special kind of error:
### Example
Print one message if the try block raises a `NameError` and another for other errors:
```python
try:
print(x)
except NameError:
print("Variable x is not defined")
except:
print("Something else went wrong")
```
---
## Else
You can use the `else` keyword to define a block of code to be executed if no errors were raised:
### Example
In this example, the `try` block does not generate any error:
```python
try:
print("Hello")
except:
print("Something went wrong")
else:
print("Nothing went wrong")
---
```
## Finally
The `finally` block, if specified, will be executed regardless if the try block raises an error or not.
### Example
```python
try:
print(x)
except:
print("Something went wrong")
finally:
print("The 'try except' is finished")
```
This can be useful to close objects and clean up resources:
### Example
Try to open and write to a file that is not writable:
```python
try:
f = open("demofile.txt")
try:
f.write("Lorum Ipsum")
except:
print("Something went wrong when writing to the file")
finally:
f.close()
except:
print("Something went wrong when opening the file")
```
The program can continue, without leaving the file object open.
---
## Raise an exception
As a Python developer you can choose to throw an exception if a condition occurs.
To throw (or raise) an exception, use the `[raise]` keyword.
### Example
Raise an error and stop the program if x is lower than 0:
x = -1
if x < 0:
raise Exception("Sorry, no numbers below zero")
The `[raise] keyword is used to raise an exception.
You can define what kind of error to raise, and the text to print to the user.
### Example
Raise a TypeError if x is not an integer:
x = "hello"
if not type(x) is int:
raise TypeError("Only integers are allowed")