tanszek:oktatas:muszaki_informatika:fajlkezeles_hibakezeles
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| tanszek:oktatas:muszaki_informatika:fajlkezeles_hibakezeles [2026/02/26 18:32] – created szabom | tanszek:oktatas:muszaki_informatika:fajlkezeles_hibakezeles [2026/03/31 06:25] (current) – [Alapvető kivételek] szabom | ||
|---|---|---|---|
| Line 141: | Line 141: | ||
| print(" | print(" | ||
| </ | </ | ||
| + | |||
| + | ---- | ||
| + | ==== Alapvető kivételek ==== | ||
| + | |||
| + | **Exception** | ||
| + | * Az összes beépített kivétel ősosztálya. | ||
| + | * Általános hibakezeléshez használható, | ||
| + | <sxh python> | ||
| + | try: | ||
| + | ... | ||
| + | except Exception as e: | ||
| + | print(e) | ||
| + | </ | ||
| + | |||
| + | **ValueError** | ||
| + | * Akkor dobódik, ha a típus megfelelő, de az érték hibás. | ||
| + | * Példa: szám konvertálás sikertelen | ||
| + | <sxh python> | ||
| + | int(" | ||
| + | </ | ||
| + | |||
| + | **TypeError** | ||
| + | * Hibás adattípus használata. | ||
| + | * Példa: nem kompatibilis típusok művelete | ||
| + | <sxh python> | ||
| + | " | ||
| + | </ | ||
| + | |||
| + | **NameError** | ||
| + | * Nem létező változó használata. | ||
| + | <sxh python> | ||
| + | print(x) | ||
| + | </ | ||
| + | |||
| + | **IndexError** | ||
| + | * Lista vagy szekvencia nem létező indexének elérése. | ||
| + | <sxh python> | ||
| + | lst = [1, 2] | ||
| + | lst[5] | ||
| + | </ | ||
| + | |||
| + | **KeyError** | ||
| + | * Szótárban nem létező kulcs elérése. | ||
| + | <sxh python> | ||
| + | d = {" | ||
| + | d[" | ||
| + | </ | ||
| + | |||
| + | **FileNotFoundError** | ||
| + | * Fájl megnyitásakor nem található az adott fájl. | ||
| + | <sxh python> | ||
| + | open(" | ||
| + | </ | ||
| + | |||
| + | **IOError / OSError** | ||
| + | * Általános fájl- vagy rendszerhibák. | ||
| + | * Pl. jogosultság, | ||
| + | <sxh python> | ||
| + | open("/ | ||
| + | </ | ||
| + | |||
| + | **ZeroDivisionError** | ||
| + | * Nullával való osztás. | ||
| + | <sxh python> | ||
| + | 10 / 0 # ZeroDivisionError | ||
| + | </ | ||
| + | |||
| + | **ImportError** | ||
| + | * Modul importálási hiba. | ||
| + | <sxh python> | ||
| + | import nemletezo_modul | ||
| + | </ | ||
| + | |||
| + | **AttributeError** | ||
| + | * Nem létező attribútum/ | ||
| + | <sxh python> | ||
| + | " | ||
| + | </ | ||
| + | |||
| + | **StopIteration** | ||
| + | * Iterátor véget ér (pl. next() hívásnál). | ||
| + | <sxh python> | ||
| + | it = iter([1]) | ||
| + | next(it) | ||
| + | next(it) | ||
| + | </ | ||
| + | |||
| + | **AssertionError** | ||
| + | * assert utasítás sikertelensége. | ||
| + | <sxh python> | ||
| + | assert 2 > 3 # AssertionError | ||
| + | </ | ||
| + | |||
| + | **Mikor melyiket használjuk? | ||
| + | * ValueError → ha az érték tartalma hibás | ||
| + | * TypeError → ha az adattípus nem megfelelő | ||
| + | * FileNotFoundError → fájl nem létezik | ||
| + | * KeyError / IndexError → nem létező kulcs/index | ||
| + | * ZeroDivisionError → matematikai hiba | ||
| + | * AttributeError → rossz objektumhasználat | ||
| + | * ImportError → modul probléma | ||
| ---- | ---- | ||
| Line 149: | Line 250: | ||
| Adott egy jegyek.txt fájl, amely soronként a következő formátumú: | Adott egy jegyek.txt fájl, amely soronként a következő formátumú: | ||
| + | < | ||
| Anna 5 4 3 | Anna 5 4 3 | ||
| Bence 2 3 4 | Bence 2 3 4 | ||
| Csaba 1 2 | Csaba 1 2 | ||
| + | </ | ||
| * Olvasd be a fájlt. | * Olvasd be a fájlt. | ||
| * Számold ki minden diák átlagát. | * Számold ki minden diák átlagát. | ||
| Line 192: | Line 294: | ||
| f.write(sor + " | f.write(sor + " | ||
| </ | </ | ||
| - | Feladat: Szógyakoriság fájlból | + | **Feladat:** Szógyakoriság fájlból |
| Olvass be egy szoveg.txt fájlt. | Olvass be egy szoveg.txt fájlt. | ||
| Line 225: | Line 327: | ||
| Adott egy bevasarlas.txt fájl: | Adott egy bevasarlas.txt fájl: | ||
| + | < | ||
| alma 300 | alma 300 | ||
| korte 250 | korte 250 | ||
| banan 400 | banan 400 | ||
| + | </ | ||
| * Olvasd be a fájlt. | * Olvasd be a fájlt. | ||
| * Számold ki az összértéket. | * Számold ki az összértéket. | ||
| Line 330: | Line 432: | ||
| if kor < 18: | if kor < 18: | ||
| print(nev, kor) | print(nev, kor) | ||
| + | </ | ||
| + | |||
| + | **Feladat: | ||
| + | Adott egy diakok.txt fájl, amely a következő formátumú: | ||
| + | < | ||
| + | Anna; | ||
| + | Bence; | ||
| + | Csaba; | ||
| + | Dora; | ||
| + | </ | ||
| + | A program feladata: | ||
| + | |||
| + | - Olvassa be a fájlt. | ||
| + | - Alakítsa át az adatokat dictionary formára: | ||
| + | * < | ||
| + | { | ||
| + | " | ||
| + | ... | ||
| + | } | ||
| + | </ | ||
| + | - Hibakezelés: | ||
| + | * Ha a fájl nem létezik → hibaüzenet | ||
| + | * Ha egy jegy nem szám → jelezze, de a program menjen tovább | ||
| + | - Számolja ki minden diák átlagát. | ||
| + | - Írja ki az eredményt eredmeny.txt fájlba. | ||
| + | - Külön listázza a bukott diákokat (átlag < 2). | ||
| + | |||
| + | <sxh python> | ||
| + | def fajl_beolvasas(fajlnev): | ||
| + | diakok = {} | ||
| + | |||
| + | try: | ||
| + | with open(fajlnev, | ||
| + | sorok = f.readlines() | ||
| + | except FileNotFoundError: | ||
| + | print(" | ||
| + | return {} | ||
| + | |||
| + | for sor in sorok: | ||
| + | sor = sor.strip() | ||
| + | |||
| + | if not sor: | ||
| + | continue | ||
| + | |||
| + | try: | ||
| + | nev_resz, jegy_resz = sor.split(";" | ||
| + | except ValueError: | ||
| + | print(" | ||
| + | continue | ||
| + | |||
| + | tantargyak = {} | ||
| + | jegyek = jegy_resz.split("," | ||
| + | |||
| + | for adat in jegyek: | ||
| + | try: | ||
| + | tantargy, jegy = adat.split(" | ||
| + | jegy = int(jegy) | ||
| + | tantargyak[tantargy] = jegy | ||
| + | except ValueError: | ||
| + | print(f" | ||
| + | |||
| + | diakok[nev_resz] = tantargyak | ||
| + | |||
| + | return diakok | ||
| + | |||
| + | def atlag_szamitas(jegyek_dict): | ||
| + | if len(jegyek_dict) == 0: | ||
| + | return 0 | ||
| + | return sum(jegyek_dict.values()) / len(jegyek_dict) | ||
| + | |||
| + | def eredmeny_mentes(fajlnev, | ||
| + | with open(fajlnev, | ||
| + | for nev, jegyek in diakok.items(): | ||
| + | atlag = atlag_szamitas(jegyek) | ||
| + | f.write(f" | ||
| + | |||
| + | def bukottak_listaja(diakok): | ||
| + | bukott = [] | ||
| + | |||
| + | for nev, jegyek in diakok.items(): | ||
| + | atlag = atlag_szamitas(jegyek) | ||
| + | if atlag < 2: | ||
| + | bukott.append(nev) | ||
| + | |||
| + | return bukott | ||
| + | |||
| + | # -------- FŐPROGRAM -------- | ||
| + | |||
| + | diakok = fajl_beolvasas(" | ||
| + | |||
| + | if diakok: | ||
| + | eredmeny_mentes(" | ||
| + | |||
| + | bukott = bukottak_listaja(diakok) | ||
| + | |||
| + | print(" | ||
| + | for nev in bukott: | ||
| + | print(" | ||
| </ | </ | ||
tanszek/oktatas/muszaki_informatika/fajlkezeles_hibakezeles.1772130775.txt.gz · Last modified: 2026/02/26 18:32 by szabom
