Skip to content
Snippets Groups Projects
Commit bc4cb2f2 authored by Rafael László's avatar Rafael László :speech_balloon:
Browse files

error chapter

parent d1a86424
No related branches found
No related tags found
No related merge requests found
# Hibák és azok kezelése # 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 ## Hibák általánosságban
Python, mint magasszintű nyelv hibák dobására és azok Python, mint magasszintű nyelv hibák dobására és azok
...@@ -42,6 +72,17 @@ TypeError: Can't convert 'int' object to str implicitly ...@@ -42,6 +72,17 @@ TypeError: Can't convert 'int' object to str implicitly
## Hibakezelés ## 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 ... catch ...
`try` és `except` kulcsszavakkal eltudjuk kapni a különböző `try` és `except` kulcsszavakkal eltudjuk kapni a különböző
...@@ -50,10 +91,10 @@ hibáinkat. ...@@ -50,10 +91,10 @@ hibáinkat.
```python ```python
>>> while True: >>> while True:
... try: ... try:
... x = int(input("Please enter a number: ")) ... x = int(input("Adj meg egy számot: "))
... break ... break
... except ValueError: ... except ValueError:
... print("Oops! That was no valid number. Try again...") ... print("Ez nem egy szám...")
... ...
``` ```
...@@ -84,9 +125,9 @@ class C(B): ...@@ -84,9 +125,9 @@ class C(B):
class D(C): class D(C):
pass pass
for cls in [B, C, D]: for osztaly in [B, C, D]:
try: try:
raise cls() raise osztaly()
except D: except D:
print("D") print("D")
except C: except C:
...@@ -102,27 +143,26 @@ egy változóba, majd annak tartalmával dolgozhatunk. ...@@ -102,27 +143,26 @@ egy változóba, majd annak tartalmával dolgozhatunk.
import sys import sys
try: try:
f = open('myfile.txt') f = open('fajl.txt')
s = f.readline() s = f.readline()
i = int(s.strip()) i = int(s.strip())
except OSError as err: except OSError as err:
print("OS error: {0}".format(err)) print("OS error: {0}".format(err))
except ValueError: except ValueError:
print("Could not convert data to an integer.") print("Nem sikerült intbe konvertálni.")
except: except: # Minden más
print("Unexpected error:", sys.exc_info()[0]) print("Váratlan hiba:", sys.exc_info()[0])
raise raise
``` ```
### else ### else
Egy `try`, `catch` blokk legvégére tehetünk egy `else`-t, Egy `try`, `catch` blokk legvégére tehetünk egy `else`-t,
ha szeretnénk valamit lefuttatni ha nem történt semmi hiba. hogy lefuttasunk valamit ha nem történt semmi hiba.
Előző példához próbálj hozzáírni valamit.
### raise ### 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. kulcsszó segítségével.
```python ```python
...@@ -136,13 +176,13 @@ NameError: HiThere ...@@ -136,13 +176,13 @@ NameError: HiThere
>>> try: >>> try:
... raise NameError('HiThere') ... raise NameError('HiThere')
... except NameError: ... except NameError:
... print('An exception flew by!') ... print('Egy hiba történt!')
... raise ... raise
... ...
An exception flew by! An exception flew by!
Traceback (most recent call last): Traceback (most recent call last):
File "<stdin>", line 2, in <module> File "<stdin>", line 2, in <module>
NameError: HiThere NameError: Egy hiba történt!
``` ```
### finally ### finally
...@@ -152,27 +192,13 @@ lépéseket. ...@@ -152,27 +192,13 @@ lépéseket.
Az itt definiált dolgok mindenképp lefognak futni, ha volt, Az itt definiált dolgok mindenképp lefognak futni, ha volt,
ha nem volt hiba. ha nem volt hiba.
``` ```python
>>> def bool_return(): >>> def fv():
... try: ... try:
... return True ... return True
... finally: ... finally:
... return False ... return False
... ...
>>> bool_return() >>> fv()
False 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!
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment