---
# System prepended metadata

title: ASIX M3. 008. Tractament d'excepcions.
tags: [' excepcions', ' programació', asix]

---

---
title: ASIX M3. 008. Tractament d'excepcions.
tags: asix, programació, excepcions
---


<div style="width: 30%; margin-left: auto;">
    
![](https://hackmd.io/_uploads/HJiR4eGJT.png)    
    
</div>

# ASIX1 M03: Programació bàsica
[vincle a font en MarkDown](https://hackmd.io/@JdaXaviQ/Sk0KY_6VY)

---

## 008. Tractaments d'excepcions.

Una excepció és un error que es produeix __durant l'execució__ del programa. Quan es produeix, s'interromp el flux habitual d'execució i si no hem previst una alternativa el progama terminarà del tot. Col·loquialment diem que __'ha petat'__.
A diferència dels errors sintàctics, la majoria no es poden detectar quan estem escrivint el programa, el nostre codi pot èsser un codi perfectament vàlid i tot i així es poden generar excepcions que el facin _petar_.
Les excepcions són l'alternativa moderna de control d'errors i encapsulen la informació relativa al error dins d'un objecte.
El tractament de les excepcions es realitza amb les paraules reservades: 'try - except - else - finally - raise'.
### Protegir un segment de codi de possibles excepcions
```python=
try:
  "codi que pot provocar excepcions"
  "però està protegit dins d'un block 'try'"
except Exception as e:
  "codi que s'executa quan es provoca una exepció"
}
```
Aquest snippet es pot allargar amb la instrucció finally que identifica una part del codi que s'ha d'executar tant si s'ha disparat una excepció com si no.

```python=
try:
  "codi que pot provocar excepcions"
  "però està protegit dins d'un block 'try'"
except Exception as e:
  "codi que s'executa quan es provoca una exepció"
finally:
  "codi que s'executa sempre, hi hagi o no excepcions."
}

```
També és possible que tinguem instruccions que volem que s'executin només si no ha sobrevingut cap excepció, en aquest cas les posarem dins d'un block __'else'__:
```python=
try:
  "codi que pot provocar excepcions"
  "però està protegit dins d'un block 'try'"
except Exception as e:
  "codi que s'executa quan es provoca una exepció"
else:
    "codi que només s'executa si no hi han aparegut excepcions"
finally:
  "codi que s'executa sempre, hi hagi o no excepcions."
}

```
###  Provocar excepcions
De vegades som nosaltres com a programadors els que volem disparar una excepció. I ho farem amb la comanda __'raise'__.
```python=
#!/bin/python3
#_*_ coding= utf-8 _*_

import sys

"""
excepcions.py 
Mostra l'ús d'excepcions a Python

"""

def main(dividend, divisor):
    if(divisor == 0):
        raise Exception("Impossible dividir entre zero")
    return dividend / divisor;

if __name__ == "__main__":
    try:
        print(main(int(sys.argv[1]), int(sys.argv[2])))
    except Exception as e:
        print(e.args)
        print("Has intentat dividir un valor entre zero?")
    else:
        print("Torna a interpretar-la Sam")
    finally:
        print("Sempre ens quedarà París!")
```
### Alguns tipus d'excepcions comuns
Aquí hay algunas excepciones básicas que podrías encontrar cuando escribes programas. Puedes leer sobre más excepciones integradas en el sitio web oficial.

- Exception: Excepció general.
- NameError: es produeix quan el codi no troba un nom, per exemple una variable, una funció, etc.
- TypeError: Intentem operar amb el tipus de valor incorrecte.
- ValueError: Un paràmetre te un valor no apropiat.
- NotImplementedError: Aquesta és una excepció típica dels programes en desenvolupament.
- ZeroDivisionError: Quan volem dividir entre zero.
- FileNotFoundError: Apareix quan volem obrir un fiter que no existeix.