diff --git a/guide/08_error.md b/guide/08_error.md index 5bf3926ef3c9dca44c88982a478cef5e5e3daff0..6412aa2047d762760f15e359f280ace39d0bbb14 100644 --- a/guide/08_error.md +++ b/guide/08_error.md @@ -1,5 +1,35 @@ # Hibák és azok kezelése +<Note type="tip" label> + +**TL;DR Tartalom** + +- [Hibák általánosságban](#hibák-általánosságban) - + Objektumok, példák +- [Hibakezelés](#hibakezelés) + - [Saját hiba osztályok](#saját-hiba-osztályok) - Ugyanolyan + osztály + - [try ... catch ...](#try--catch-) - Dobunk és elkapunk hibát + - [else](#else) - Semmi hiba nem volt, csinálj valamit + - [raise](#raise) - Hibával dobálózás + - [finally](#finally) - Még a returnt is felülírjuk + +</Note> + +<Note label> + +**Extra feladatok** +_Ezek nem kötelező feladatok, csak megoldásuk közben könyebb +megtanulni a dolgokat_ + +- Készíts egy saját hiba osztályt, melyben letárolsz + egy számot és híváskor kiírja azt. + (Tipp: `\_\_init\_\_`, `\_\_str\_\_`) +- Imént definiált hibát kapd el, irasd ki és ne hagyd + miatta leállni a programot. + +</Note> + ## Hibák általánosságban Python, mint magasszintű nyelv hibák dobására és azok @@ -42,6 +72,17 @@ TypeError: Can't convert 'int' object to str implicitly ## Hibakezelés +### Saját hiba osztályok + +Tudunk készíteni saját hibákat. +Ehhez csak egy osztályt kell készítenünk. + +```python +class ForgovillaHiba(Exception): # Leszármazik az Exceptionből + """Valami baj van a forgóvillával""" + pass # sad SCH noises +``` + ### try ... catch ... `try` és `except` kulcsszavakkal eltudjuk kapni a különböző @@ -50,10 +91,10 @@ hibáinkat. ```python >>> while True: ... try: -... x = int(input("Please enter a number: ")) +... x = int(input("Adj meg egy számot: ")) ... break ... except ValueError: -... print("Oops! That was no valid number. Try again...") +... print("Ez nem egy szám...") ... ``` @@ -84,9 +125,9 @@ class C(B): class D(C): pass -for cls in [B, C, D]: +for osztaly in [B, C, D]: try: - raise cls() + raise osztaly() except D: print("D") except C: @@ -102,27 +143,26 @@ egy változóba, majd annak tartalmával dolgozhatunk. import sys try: - f = open('myfile.txt') + f = open('fajl.txt') s = f.readline() i = int(s.strip()) except OSError as err: print("OS error: {0}".format(err)) except ValueError: - print("Could not convert data to an integer.") -except: - print("Unexpected error:", sys.exc_info()[0]) + print("Nem sikerült intbe konvertálni.") +except: # Minden más + print("Váratlan hiba:", sys.exc_info()[0]) raise ``` ### else Egy `try`, `catch` blokk legvégére tehetünk egy `else`-t, -ha szeretnénk valamit lefuttatni ha nem történt semmi hiba. -Előző példához próbálj hozzáírni valamit. +hogy lefuttasunk valamit ha nem történt semmi hiba. ### raise -Mi is tudunk hibákat dobni, ha szeretnénk a `raise` +Mi is tudunk hibákat dobni a `raise` kulcsszó segítségével. ```python @@ -136,13 +176,13 @@ NameError: HiThere >>> try: ... raise NameError('HiThere') ... except NameError: -... print('An exception flew by!') +... print('Egy hiba történt!') ... raise ... An exception flew by! Traceback (most recent call last): File "<stdin>", line 2, in <module> -NameError: HiThere +NameError: Egy hiba történt! ``` ### finally @@ -152,27 +192,13 @@ lépéseket. Az itt definiált dolgok mindenképp lefognak futni, ha volt, ha nem volt hiba. -``` ->>> def bool_return(): +```python +>>> def fv(): ... try: ... return True ... finally: ... return False ... ->>> bool_return() +>>> fv() False ``` - -### Saját hiba osztályok - -Mi is tudunk készíteni saját Hibákat. -Ehhez csak egy osztályt kell készítenünk. - -```python -class Error(Exception): - """Base class for exceptions in this module.""" - pass -``` - -Ezt innentől ugyanúgy tudjuk dobni és elkapni. -Próbálj meg pár hiba osztályt te is készíteni!