{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ " Τμήμα Πληροφορικής και Τηλεπικοινωνιών - Άρτα \n", " Πανεπιστήμιο Ιωαννίνων \n", "\n", " Γκόγκος Χρήστος \n", " http://chgogos.github.io/\n", " Εαρινό εξάμηνο 2020-2021" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Εξαιρέσεις (exceptions)\n", "\n", "Οι εξαιρέσεις συνιστούν \"μη κανονικής\" καταστάσεις κατά την εκτέλεση του προγράμματος οι οποίες μπορούν ωστόσο να συμβούν (π.χ. προσπάθεια ανοίγματος αρχείου που δεν υπάρχει).\n", "\n", "Ο χειρισμός των εξαιρέσεων στην Python γίνεται με προτάσεις try/except/finally\n", "\n", "Παραδείγματα συνηθισμένων εξαιρέσεων:\n", "* AttributeError\n", "* Exception\n", "* ImportError\n", "* IndexError\n", "* IOError\n", "* KeyError\n", "* NameError\n", "* RuntimeError\n", "* TypeError\n", "* ValueError\n", "* ZeroDivisionError\n", "\n", "Πλήρης λίστα των εξαιρέσεων μπορεί να βρεθεί στην [τεκμηρίωση της γλώσσας](https://docs.python.org/3/library/exceptions.html)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Διαίρεση με το μηδέν\n", "Συνέχεια\n" ] } ], "source": [ "try:\n", " x = 1 / 0\n", "except ZeroDivisionError:\n", " print(\"Διαίρεση με το μηδέν\")\n", "print(\"Συνέχεια\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Δείκτης εκτός ορίων λίστας\n", "Συνέχεια\n" ] } ], "source": [ "a_list = [1, 2, 3]\n", "try:\n", " a_list[10]\n", "except IndexError:\n", " print(\"Δείκτης εκτός ορίων λίστας\")\n", "print(\"Συνέχεια\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Αναφορά σε κλειδί που δεν υπάρχει στο λεξικό\n", "Συνέχεια\n" ] } ], "source": [ "a_dict = {\"a\": 1, \"b\": 5}\n", "try:\n", " x = a_dict[\"c\"]\n", "except KeyError:\n", " print(\"Αναφορά σε κλειδί που δεν υπάρχει στο λεξικό\")\n", "print(\"Συνέχεια\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Δείκτης εκτός ορίων λίστας\n", "Συνέχεια\n" ] } ], "source": [ "a_list = [1, 2, 3]\n", "a_dict = {\"a\": 1, \"b\": 5}\n", "try:\n", " a_list[10]\n", " x = a_dict[\"c\"]\n", " x = 1 / 0\n", "except IndexError:\n", " print(\"Δείκτης εκτός ορίων λίστας\")\n", "except KeyError:\n", " print(\"Αναφορά σε κλειδί που δεν υπάρχει στο λεξικό\")\n", "except:\n", " print(\"Λάθος\")\n", "print(\"Συνέχεια\")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Λάθος\n", "Συνέχεια\n" ] } ], "source": [ "a_list = [1, 2, 3]\n", "a_dict = {\"a\": 1, \"b\": 5}\n", "try:\n", " a_list[10]\n", " x = a_dict[\"c\"]\n", " x = 1 / 0\n", "except (IndexError, KeyError, ZeroDivisionError):\n", " print(\"Λάθος\")\n", "print(\"Συνέχεια\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Δείκτης εκτός ορίων λίστας\n", "Εντολές εκκαθάρισης\n", "Συνέχεια\n" ] } ], "source": [ "# try/except/finally\n", "# Oι εντολές στο finally εκτελούνται αν συμβεί exception. Αν δεν συμβεί exception τότε δεν εκτελούνται οι εντολές στο finally\n", "\n", "a_list = [1, 2, 3]\n", "try:\n", " a_list[10]\n", "except IndexError:\n", " print(\"Δείκτης εκτός ορίων λίστας\")\n", "finally:\n", " print(\"Εντολές εκκαθάρισης\")\n", "print(\"Συνέχεια\")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Όλα εντάξει\n", "Εντολές εκκαθάρισης\n", "Συνέχεια\n" ] } ], "source": [ "# try/except/else/finally\n", "# οι εντολές στο else εκτελούνται αν δεν συμβεί exception (σε αυτή την περίπτωση θα εκτελεστούν και οι εντολές του finally)\n", "\n", "a_list = [1, 2, 3]\n", "try:\n", " a_list[1]\n", "except IndexError:\n", " print(\"Δείκτης εκτός ορίων λίστας\")\n", "else:\n", " print(\"Όλα εντάξει\")\n", "finally:\n", " print(\"Εντολές εκκαθάρισης\")\n", "print(\"Συνέχεια\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A RuntimeError occured\n" ] } ], "source": [ "# raise\n", "\n", "try:\n", " raise RuntimeError\n", "except RuntimeError:\n", " print(\"A RuntimeError occured\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.0" } }, "nbformat": 4, "nbformat_minor": 2 }