{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Hibakezelés" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pythonban a `try` blokk lehetővé teszi egy kódblokk tesztelését hibák keresésére. Ha a blokkon belül keletkezik egy hiba, akkor kapunk egy kivételt (except), amely a hiba típusára utal.\n", "\n", "Gyakori kivételtípusok:\n", "- TypeError: Érték- vagy típusellenőrzési hiba.\n", "- ValueError: Érvénytelen érték vagy argumentum.\n", "- ZeroDivisionError: Nullával való osztás hiba.\n", "- FileNotFoundError: Fájl nem található hiba.\n", "- IndexError: Érvénytelen indexelés hiba egy sorozatban (pl. lista, tuple).\n", "- KeyError: Érvénytelen kulcs hiba egy szótárban. \n", "- Exception: Az összes kivétel ősosztálya. Elkap bármely típusú kivételt.\n", "\n", "A hibát az `except` kulcshoz tartozó kivételtípusok alapján el lehet kapni és le lehet kezelni. A kivételkezelés sorrendje számít. Ha több `except` blokk van jelen, akkor a Python az első olyan blokkot fogja választani, amelyik a kiváltott kivétel típusával megegyezik. Az általános célú `Exception` minden hibát elkap, ezért ezt kell a legutoljára hagyni. Az üresen hagyott `except` kulcsszó az általános `Exception` típus rövídített alakja.\n", "\n", "Lehetőség van itt is egy olyan `else` ág használatára, amely csak akkor fut le, ha nem keletkezett előtte hiba.\\\n", "Egy `finally` blokk a végén mindig lefuttatható, függetlenül attól, hogy történt-e előtte hiba." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "try:\n", " oszto = int(input(\"Adja meg az osztót: \"))\n", " eredmeny = 10 / oszto\n", " print(\"Az eredmény:\", eredmeny)\n", " \n", "except ZeroDivisionError:\n", " print(\"Hiba: Nullával való osztás nem megengedett!\")\n", "\n", "except ValueError:\n", " print(\"Hiba: Érvénytelen bemenet! Egész számot adjon meg.\")\n", "\n", "except Exception as error:\n", " print(\"Hiba: \", error)\n", "\n", "else:\n", " print(\"A try blokk sikeresen lefutott.\")\n", "\n", "finally:\n", " print(\"A finally blokk mindig lefut, függetlenül attól, volt-e kivétel vagy sem.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Kivétel dobása" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Saját ellenőrzések során talált hibák esetén, mi magunk is dobhatunk egy kivételt a `raise` kulcsszó segítségével. A kulcsszó után adjuk meg a kivétel típusát és a hibüzenetet. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Típushiba jelzése:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = \"hello\"\n", "\n", "if not type(x) is int:\n", " raise TypeError(\"Hiba: Érvénytelen bemenet! Egész számot adjon meg.\") " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tartomány hiba jelzése:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = -1\n", "\n", "if x < 0:\n", " raise Exception(\"Hiba, az érték kisebb, mint nulla\") " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Kivétel továbbdobása" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Egy függvényben elkapott kivétel továbbadható egy üres `raise` kulcsszóval. A hívó rész újra elkaphatja és lekezelheti a továbbküldött hibát." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def osztas(a, b):\n", " try:\n", " eredmeny = a / b\n", " return eredmeny\n", "\n", " except ZeroDivisionError as error:\n", " print(f\"Hiba: {error}\")\n", " raise # Az eredeti kivétel továbbdobása\n", "\n", "# Kivétel kezelése az osztas() függvény hívásakor\n", "try:\n", " result = osztas(10, 0)\n", " print(\"Az eredmény:\", result)\n", "\n", "except ZeroDivisionError:\n", " print(\"A kivétel el lett kapva a főprogramban is.\")\n" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.1" } }, "nbformat": 4, "nbformat_minor": 2 }