---
title: ASIX M3. 008. Tractament d'excepcions.
tags: asix, programació, excepcions
---
<div style="width: 30%; margin-left: auto;">

</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.