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