ΜΥΥ105: Εισαγωγή στον Προγραμματισμό

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Προγραμματισμός Ι (αποφύγετέ τον!) 3) Διακοπτόμενος βρόχος: (αποφύγετέ τον!) float energy;......while(TRUE){drink_water(); if(energy
Advertisements

ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
Φροντηστήριο Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Eργαλεία.
PL/SQL.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 4: Exceptions Εβδομάδα 4: Εξαιρέσεις [Exceptions]
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 5: Επαναληπτικές και εξωτερικές συναρτήσεις και διαδικασίες Εαρινό εξάμηνο 2009.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 3: Δείκτες Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ι. Σαρρής, τηλ.
ΕΠΑΝΑΛΗΨΗΕΠΑΝΑΛΗΨΗ ΠΡΟΓΡΑΜΜΑΤΑ. ΠΡΟΓΡΑΜΜΑ 1 ΕΞΗΓΗΣΤΕ ΤΙ ΕΞΟΔΟ ΠΑΡΑΓΕΙ ΤΟ ΠΑΡΑΚΑΤΩ ΠΡΟΓΡΑΜΜΑ #include int main() { char ch; int i; float fl; printf("dose.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
Υποθετικός τελεστής Ο υποθετικός τελεστής (?:) αποτελείται από δύο σύμβολα. Ανήκει στην κατηγορία των τελεστών που αποτελούνται από συνδυασμό συμβόλων.
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
ΣΥΝΑΡΤΗΣΕΙΣ.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java II.
Γλωσσική Τεχνολογία Εισαγωγικό Φροντιστήριο. Project του μαθήματος  Εργασία 2 ατόμων  Προφορική εξέταση για :  Project (80%)  Θεωρία (20%)  Στο φροντιστήριο.
Κεφάλαιο 10 – Υποπρογράμματα
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
32η Συνάντηση Εκπαιδευτικών στη Δυτική Μακεδονία σε Θέματα Τ. Π. Ε
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
2/28/00epl-1311 Παραδειγματα Aλγοριθμων Αριθμος λεξεων που διαβαστηκαν απο εισοδο Εκτυπωση περιφερειας τετραγωνων με * Υπολογισμος exp(x,n) = 1 + x/1!
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Αρχεία.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
Κεφάλαιο 4 Εξαιρέσεις. Όταν σε ένα πρόγραμμα συμβεί κάποιο λάθος, ο κώδικας εγείρει (throw) μία εξαίρεση. Στη Java oι εξαιρέσεις εκπροσωπούνται από αντικείμενα.
ΕΙΣΑΓΩΓΙΚΟ ΦΡΟΝΤΙΣΤΗΡΙΟ Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία.
Βασικά στοιχεία της Java
Κεφάλαιο 3 Τύποι Δεδομένων - Τελεστές. Πρωτογενείς τύποι δεδομένων: int, float, double, chars ΤύποςΌνομαΜέγεθος byte 8-bit signed, short 16-bit.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
Εισαγωγή στην Python.
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγ/μό Η/Υ
Βρόχος Do … Loop Σκοπός Μαθήματος Χρήση Do… Loop για την εκτέλεση μιας ομάδας εντολών μέχρι να εκπληρωθεί μια συγκεκριμένη συνθήκη. Αθήνα, 2015.
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Εφαρμογές Υπολογιστών
ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ
Ενισχυτική διδασκαλία
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Ενισχυτική διδασκαλία
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
«Από τη MicroWorlds Pro στην Python»
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ Η/Υ
ΗΥ-150 Προγραμματισμός Αναδρομή (1/2).
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
Εξαιρέσεις [Exceptions]
Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου
Μεταγράφημα παρουσίασης:

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό Σφάλματα, εξαιρέσεις, εκσφαλμάτωση

Τύποι Σφαλμάτων Συντακτικά λάθη (syntax errors) Λάθη κατά την εκτέλεση (run-time errors) Λογικά σφάλματα

Συντακτικά Λάθη Είναι σημαντικό να καταλάβουμε το συντακτικό λάθος και να το διορθώσουμε break.py from math import sqrt for n in range(99, 0, -1): root = sqrt(n) if root == int(root): print (n) break Ο interpreter της Python μας λέει σε ποια γραμμή είναι το λάθος python3 break.py File "break.py", line 6 break ^ IndentationError: unindent does not match any outer indentation level Επίσης το μήνυμα μπορεί να μας δίνει επιπλέον πληροφορία για το λάθος.

Συντακτικά Λάθη Είναι σημαντικό να καταλάβουμε το συντακτικό λάθος και να το διορθώσουμε test.py suits = ['\u2660', '\u2661', '\u2662', '\u2663'] print((suits) x = 5 Σε κάποια λάθη, το μήνυμα μπορεί να φαίνεται ότι είναι για λάθος γραμμή. Αυτή είναι η γραμμή στην οποία ο interpreter δεν μπορεί πλέον να ολοκληρώσει μια σωστή εντολή python3 test.py File "test.py", line 3 x = 5 ^ SyntaxError: invalid syntax

Συντακτικά Λάθη Είναι σημαντικό να καταλάβουμε το συντακτικό λάθος και να το διορθώσουμε >>> (3+4] SyntaxError: invalid syntax >>> if x==5 >>> print 'hello' >>> lst = [1;2;3] >>> for i in range(10): print(i) SyntaxError: expected an indented block

Λάθη κατά την εκτέλεση Δεν υπάρχει συντακτικό λάθος, αλλά το πρόγραμμά μας τερματίζει γιατί μπαίνει σε μια μη εγκυρη κατάσταση. >>> 4/0 Traceback (most recent call last): File "<pyshell#43>", line 1, in <module> 4/0 ZeroDivisionError: division by zero >>> lst = [1,2,3] >>> lst[3] File "<pyshell#45>", line 1, in <module> lst[3] IndexError: list index out of range

Λάθη κατά την εκτέλεση Πρέπει να διαβάσουμε και να καταλάβουμε το σφάλμα >>> y + 5 Traceback (most recent call last): File "<pyshell#46>", line 1, in <module> y + 5 NameError: name 'y' is not defined >>> '2' * '3' File "<pyshell#47>", line 1, in <module> '2' * '3' TypeError: can't multiply sequence by non-int of type 'str' Και στα λάθη κατά την εκτέλεση η γραμμή και το μήνυμα μας δίνουν πληροφορίες για να καταλάβουμε το λάθος.

Λάθη κατά την εκτέλεση Πρέπει να διαβάσουμε και να καταλάβουμε το σφάλμα >>> int('4.5') Traceback (most recent call last): File "<pyshell#48>", line 1, in <module> int('4.5') ValueError: invalid literal for int() with base 10: '4.5' >>> 2.0**10000 File "<pyshell#49>", line 1, in <module> 2.0**10000 OverflowError: (34, 'Result too large')

Εξαιρέσεις Όταν το πρόγραμμα μπει σε μια μη έγκυρη κατάσταση δημιουργεί μια εξαίρεση (exception) Η εξαίρεση είναι κι αυτή αντικείμενο Κάθε εξαίρεση ανήκει σε ένα τύπο Ο τύπος μας βοηθάει να καταλάβουμε το σφάλμα Εξαίρεση Εξήγηση KeyboardInterrupt Ο χρήστης διέκοψε το πρόγραμμα με Crtl-C OverflowError Ένας float πήρε πολύ μεγάλη τιμή ZeroDivisionError Διαίρεση με το 0 FileNotFoundError Το όνομα αρχείου που επιχειρούμε να ανοίξουμε δεν υπάρχει IndexError Προσπαθήσαμε να προσπελάσουμε μια μη έγκυρη θέση ακολουθίας NameError Προσπέλαση μεταβλητής που δεν έχει οριστεί TypeError Μια λειτουργία εφαρμόζεται σε λάθος τύπο αντικειμένου ValueError Μια λειτουργία εφαρμόζεται σε μη έγκυρη τιμή

Δημιουργία Εξαιρέσεων Μπορούμε να δημιουργήσουμε εξαίρεση στο πρόγραμμα ή τη συνάρτησή μας αν κάτι δεν είναι έγκυρο με βάση τις προδιαγραφές μας με την εντολή raise x = int(input('Input a number between 10 and 20: ')) if x<10 or x>20: raise Exception('Number outside valid range') print(x**2) περιγραφή της εξαίρεσης Input a number between 10 and 20: 12 144 Input a number between 10 and 20: 3 Traceback (most recent call last): File "test.py", line 3, in <module> raise Exception('Number outside valid range') Exception: Number outside valid range

«Πιάσιμο» Εξαιρέσεων Μπορούμε να αποφύγουμε να τερματίσει το πρόγραμμά μας, φροντίζοντας να «πιάνουμε» τυχόν εξαιρέσεις try: x = eval(input('Enter the first number: ')) y = eval(input('Enter the second number: ')) print (x/y) except ZeroDivisionError: print("The second number can't be zero!") print("program finished normally...") Enter the first number: 3 Enter the second number: 4 0.75 program finished normally...

«Πιάσιμο» Εξαιρέσεων Μπορούμε να αποφύγουμε να τερματίσει το πρόγραμμά μας, φροντίζοντας να «πιάνουμε» τυχόν εξαιρέσεις try: x = eval(input('Enter the first number: ')) y = eval(input('Enter the second number: ')) print (x/y) except ZeroDivisionError: print("The second number can't be zero!") print("program finished normally...") Enter the first number: 3 Enter the second number: 0 The second number can't be zero! program finished normally...

Αλλά... try: x = eval(input('Enter the first number: ')) y = eval(input('Enter the second number: ')) print (x/y) except ZeroDivisionError: print("The second number can't be zero!") print("program finished normally...") Enter the first number: 3a Traceback (most recent call last): File "/Users/Nikos/Dropbox/courses/course_python/py/test.py", line 2, in <module> x = eval(input('Enter the first number: ')) File "<string>", line 1 3a ^ SyntaxError: unexpected EOF while parsing

«Πιάσιμο» Εξαιρέσεων try: x = eval(input('Enter the first number: ')) y = eval(input('Enter the second number: ')) print (x/y) except ZeroDivisionError: print("The second number can't be zero!") except NameError: print("You did not give a number") except SyntaxError: print("You did not give a number”) οι εξαίρεσεις εξετάζονται με αυτή τη σειρά

«Πιάσιμο» Εξαιρέσεων try: x = eval(input('Enter the first number: ')) y = eval(input('Enter the second number: ')) print (x/y) except ZeroDivisionError: print("The second number can't be zero!") except: print("Something wrong happened") αν δεν προσδιορίσουμε συγκεκριμένο τύπο εξαίρεσης μετά το except, τότε εννοούμε οποιαδήποτε εξαίρεση το σκέτο except πρέπει να μπαίνει με προσοχή γιατί πιάνει τα πάντα (ακόμα και το Ctrl-C)

«Πιάσιμο» Εξαιρέσεων try: x = eval(input('Enter the first number: ')) y = eval(input('Enter the second number: ')) print (x/y) except (ZeroDivisionError, NameError, SyntaxError): print("Something wrong with your numbers") μπορούμε να βάλουμε πολλούς τύπους εξαιρέσεων

«Πιάσιμο» Εξαιρέσεων try: x = eval(input('Enter the first number: ')) y = eval(input('Enter the second number: ')) print (x/y) except (ZeroDivisionError, NameError, SyntaxError) as e: print(e) αποθηκεύει το αντικείμενο της εξαίρεσης στη μεταβλητή e Enter the first number: 3a unexpected EOF while parsing (<string>, line 1)

Χρήση try/except/else while True: try: x = eval(input('Enter the first number: ')) y = eval(input('Enter the second number: ')) value = x/y print ('x/y is', value) except Exception as e: print('Invalid input: ',e) print('Please try again.') else: break τυπώνουμε την εξαίρεση για να ξέρει ο χρήστης τι πήγε στραβά Το else αντιστοιχεί στην περίπτωση που δεν δημιουργήθηκε εξαίρεση. Τότε όλα πήγαν καλά και ο βρόγχος τερματίζει

Παράδειγμα Γράψτε μια συνάρτηση που θα μετατρέπει την πρώτη γραμμή ενός αρχείου σε ακέραιο και μετά θα τυπώνει τον ακέραιο def readAge(filename): try: infile = open(filename) strAge = infile.readline() age = int(strAge) print('age is',age) except IOError: print('Input/Output error.') except ValueError: print('Value cannot be converted to integer.') except: print('Other error.')

Εξαιρέσεις και συναρτήσεις Αν δημιουργηθεί εξαίρεση (σφάλμα) μέσα σε μια συνάρτηση, τότε η συνάρτηση σταματάει και επιστέφει Μπορούμε να «πιάσουμε» εξαιρέσεις μέσα στη συνάρτηση και να τις χειριστούμε Επίσης μπορούμε να «πιάσουμε» μια εξαίρεση που δημιουργήθηκε σε μια συνάρτηση έξω από τη συνάρτηση Μια εξαίρεση που δημιουργείται σε μια συνάρτηση, αν δεν τη χειριστούμε εκεί, «μεταφέρεται» στο σημείο που καλείται η συνάρτηση, και με τον ίδιο τρόπο μέχρι το κυρίως πρόγραμμα Αν δεν χειριστούμε την εξαίρεση κάπου, το πρόγραμμα τερματίζει με σφάλμα δείχνοντας όλα τα σημεία από όπου πέρασε η εξαίρεση (στοίβα εκτέλεσης προγράμματος).

Εξαιρέσεις και συναρτήσεις def faulty(): raise Exception('Something is wrong') def ignore_exception(): faulty() def handle_exception(): try: faulty() except: print('Exception handled') >>> ignore_exception() Traceback (most recent call last): File "<pyshell#12>", line 1, in <module> ignore_exception() File "test.py", line 5, in ignore_exception faulty() File "test.py", line 3, in faulty raise Exception('Something is wrong') Exception: Something is wrong

Εξαιρέσεις και συναρτήσεις def faulty(): raise Exception('Something is wrong') def ignore_exception(): faulty() def handle_exception(): try: faulty() except: print('Exception handled') >>> handle_exception() Exception handled

Εξαιρέσεις και συναρτήσεις

Πιάνοντας εξαιρέσεις Είναι πολύ συνηθισμένο να πιάνουμε την εξαίρεση σε διαφορετικό σημείο από αυτό που δημιουργήθηκε. while True: try: x = int(input('give a number (not 2):')) f(x) except Exception as e: print(e) else: break Πιάνουμε την εξαίρεση όταν ξέρουμε τι θα την κάνουμε

Πετώντας και πιάνοντας εξαιρέσεις def read_digit(): x = int(input('give digit:')) if (x < 0 or x >9): raise Exception('More than a digit') return x while True: try: x = read_digit() except Exception as e: print(e) else: break print(x) Δημιουργούμε την εξαίρεση μέσα στην συνάρτηση και την πιάνουμε στο κύριο πρόγραμμα.

Παράδειγμα Έστω ότι αποθηκεύουμε τα στοιχεία προσώπων σαν λεξικά Αν ένα πρόσωπο δέν έχει κάποια στοιχεία, ή δεν τα γνωρίζουμε, απλά δεν υπάρχουν στο λεξικό του >>> john = {'age':34, 'name':'John'} >>> steve = {'age':23, 'occupation':'locksmith'} >>> john['age'] 34 >>> john['occupation'] Traceback (most recent call last): File "<pyshell#19>", line 1, in <module> person['occupation'] KeyError: 'occupation'

Παράδειγμα Θέλουμε να γράψουμε μια συνάρτηση describePerson() που να τυπώνει τα υπάρχοντα στοιχεία του προσώπου που της δίνεται σαν όρισμα Το name είναι υποχρεωτικό κλειδί στο όρισμα της συνάρτησης, τα υπόλοια στοιχεία, προαιρετικά >>> john = {'age':34, 'name':'John'} >>> steve = {'name':'Steve', 'occupation':'locksmith'} >>> describePerson(john) Description of John Age: 34 >>> describePerson(steve) Description of Steve Occupation: locksmith

Παράδειγμα Θέλουμε να γράψουμε μια συνάρτηση describePerson() που να τυπώνει τα υπάρχοντα στοιχεία του προσώπου που της δίνεται σαν όρισμα Βάζουμε ένα if για κάθε πιθανό στοιχείο! def describePerson(person): print('Description of', person['name']) if 'age' in person: print('Age:', person['age']) if 'occupation' in person: print('Occupation:', person['occupation']) if 'marital' in person: print('Marital Status:', person['marital'])

Παράδειγμα Θέλουμε να γράψουμε μια συνάρτηση describePerson() που να τυπώνει τα υπάρχοντα στοιχεία του προσώπου που της δίνεται σαν όρισμα Με χρήση εξαιρέσεων: def describePerson(person): print('Description of', person['name']) try: print('Age:', person['age']) except KeyError: pass try: print('Occupation:', person['occupation']) try: print('Marital Status:', person['marital'])

Αποσφαλμάτωση Αν το πρόγραμμά μας δε λειτουργεί σωστά (π.χ. έχει λογικό σφάλμα) και δεν ξέρουμε που είναι το σφάλμα, πρέπει να χρησιμοποιήσουμε μια μέθοδο εκσφαλμάτωσης (debugging). Η εκσφαλμάτωση μπορεί να γίνει με ειδικά προγράμματα (debuggers) Ο debugger προσομοιώνει την εκτέλεση του προγράμματος εντολή-προς-εντολή και δίνει ανά πάσα στιγμή τις τιμές των μεταβλητών και τη στοίβα του προγράμματος Τα περισσότερα IDE (integrated development interfaces) εμπεριέχουν debugger

Αποσφαλμάτωση Τυπική μεθοδολογία εκσφαλμάτωσης: Επανάληψη του προγράμματος (ώστε να εντοπιστεί το σφάλμα) Απομόνωση του σημείου που εμφανίζεται το σφάλμα Αναγνώριση της αιτίας που το προκαλεί (π.χ. από απροσεξία ή από λογικό σφάλμα) Διόρθωση του σφάλματος Επιβεβαίωση της διόρθωσης (επανάληψη του προγράμματος, δοκιμή με διαφορετικές εισόδους) Τα παραπάνω βήματα είναι τυπικά. Κάποιοι προγραμματιστές μπορεί να ακολουθούν μια παραλλαγή της μεθοδολογίας αυτής

Συμβουλές για την πρόληψη σφαλμάτων Σχεδιάστε πρώτα τον αλγόριθμό σας στο χαρτί και βεβαιωθείτε ότι δεν έχει λογικά λάθη Γράφετε το πρόγραμμά σας λίγο-λίγο και εκτελείτε το δοκιμάζοντας την ορθότητά του (π.χ. με εντολές print) πριν προχωρήσετε στο να γράψετε τις επόμενες γραμμές του Δοκιμάζετε πάντα την ορθότητα με μια ποικιλία δεδομένων εισόδου και βεβαιωθείτε ότι είναι σωστό για όλες τις πιθανές εισόδους Κάντε χρήση συναρτήσεων ώστε να σπάσετε το πρόγραμμα σε μικρά υπο-προγράμματα τα οποία είναι ευκολότερο να ελεγχθούν Εισάγετε σχόλια ώστε να μπορέσετε να θυμηθείτε τη λειτουργία τμημάτων κώδικα που θα πρέπει να αλλάξετε σε περίπτωση σφάλματος