!!! Blocks

%%info
This is __Exercise 2__ of the [Micro Python Tutorial].
%%

In Python, a block is a group of statements that belong together, forming the body of a function, loop, class or other structure. A block is defined by an initial line followed by the contents of the block indented four characters.

As an example, a {{for}} block sets up a loop:

%%filename main.py %% %%python
for i in range(0,5):
    print(i)  
%%

%%warning
Notice that the contents of the {{for}} block are indented four characters. This causes the contents of the block to be executed five times, printing the value of the index variable ("i") each time. 
%%

!! The try-except-finally Block

There is a {{try-except-finally}} structure called a __compound statement__, consisting of three separate __blocks__. This is ideal for a main.py file, and is also a very common and useful structure. It is composed of three parts:


* {{try}}: this block contains is the code we want to ''try'' to execute
* {{except}}: this block catches any errors or exceptions that occur and executes the block, handling the exception
* {{finally}}: no matter what happens, this block will be executed after the {{try}} (and possibly {{except}}) blocks are executed

In the below example, there is a {{try}} block, followed by an {{except}} block, followed by a {{finally}} block. A {{try}} block must be followed by an {{except}} block and/or a {{finally}} block (you must have one of them).

%%filename main.py %%
%%python
try:

    print('hello world.') # remember to indent the insides of your blocks by 4 characters!

except Exception: 
    # this block is executed if there is an exception (error)
    print('an error occurred.') 
finally:
    # this is always executed, no matter what
    print('complete.')
%%

If you want to use the exception to print out an error message you need to assign it to a variable (in this case, we've used {{ex}}).

%%filename main.py %%
%%python
try:

    print('hello world.')

except Exception as ex: # we assign the Exception to the variable 'ex'
    print('an error occurred: {}'.format(ex))
finally:
    print('complete.')
%%

!! Optional Blocks

As mentioned above, in the {{try-except-finally}} compound statement, the {{except}} or {{finally}} block is optional.

If you don't need to do anything after exiting the {{try}} block you can leave off the {{finally}} block:

%%filename main.py %%
%%python
try:

    print('hello world.')

except Exception:
    print('an error occurred.')
%%

or, just using {{finally}}:

%%filename main.py %%
%%python
try:

    print('hello world.')

finally:
    print('complete.')
%%
This would be useful when you want the Exception to be passed on and handled somewhere else. 


----
__Previous:__ [MicroPython Tutorial Exercise 1|MicroPythonTutorialExercise01]: main.py \\
__Next:__ [MicroPython Tutorial Exercise 3|MicroPythonTutorialExercise03]: functions