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
<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!
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment