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

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

Εξαιρέσεις Εισαγωγή. Εξαιρέσεις. ηµήτρης Λεβεντέας

ΗΥ101: Εισαγωγή στην Πληροφορική

Γλώσσα προγραμματισμού python

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Εισαγωγή στην Python Χειµερινό Εξάµηνο 2014

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Εισαγωγή στην Python Χειμερινό Εξάμηνο 2016

Εισαγωγή στον Προγ/μό Υπολογιστών

Θέματα Προγραμματισμού Η/Υ

ΚΕΦΑΛΑΙΟ 7. Αρχεία, εξαιρέσεις & εκσφαλμάτωση. 7.1 Εισαγωγή

ΜΑΘΗΜΑΤΑ PYTHON. Καθηγητής Ι. Δημητρίου.

3. Γράψτε μία εντολή που να εμφανίζει π.χ. «Πόσα είναι τα κορίτσια του;» και μία που να εμφανίζει: «Τα κορίτσια του Τζειμς Μποντ είναι 4»

ΜΑΘΗΜΑΤΑ PYTHON. Καθηγητής Ι. Δημητρίου.

Γλώσσες Προγραμματισμού Εφαρμογών - ΜΕΠΒ20

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Λεξικά Χειμερινό Εξάμηνο 2016

Βασικά στοιχεία γλώσσας προγραμματισμού. Σπάχος Κυριάκος Καθηγητής Πληροφορικής ΠΕ19

Εισαγωγή στον Προγ/μό Υπολογιστών

ΠΛΗΡΟΦΟΡΙΚΗ Ι (Python) Ενότητα 6. Αρχεία (Files)

Η Απάντηση. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Μηνύματα. 1. Πληκτρολογήστε την εντολή:

Βασικά Στοιχεία Python 3

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

Λογικές εκφράσεις και μεταβλητές

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Ακολουθίες: Λίστες και Πλειάδες Χειμερινό Εξάμηνο 2016

print( x is positive ) Στο διερμηνευτή Python, προσοχή στη στοίχιση, διότι γίνεται από το χρήστη:

Σημειωματάριο Τετάρτης 18 Οκτ. 2017

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αλφαριθμητικά Χειμερινό Εξάμηνο 2016

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Έλεγχος Ροής Προγράµµατος Χειµερινό Εξάµηνο 2014

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Εισαγωγή στον Προγραμματισμό

Παράδειγμα. print (random.sample('christos drosos',3)) #3 στοιχεία από το δείγμα print (random.gauss(0,1)) #μέση τιμή 0 και απόκλιση 1

Θέματα Προγραμματισμού Η/Υ

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Λίστες και Πλειάδες Χειµερινό Εξάµηνο 2014

Πληρουορική Γ Γσμμασίοσ

ΚΕΦΑΛΑΙΟ 2. Τιμές, τύποι, μεταβλητές, λέξεις-κλειδιά, εντολές. 2.1 Εισαγωγή

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Επαναληπτικές Ασκήσεις Χειµερινό Εξάµηνο 2014

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Λεξικά Χειµερινό Εξάµηνο 2014

Υπολογισμός - Εντολές Ελέγχου

Πληροφορική ΙΙ Θεματική Ενότητα 3

Η Απάντηση. Φύλλο Εργασίας. Μηνύματα

ΠΛΗΡΟΦΟΡΙΚΗ Ι (Python) Ενότητα 5. Λεξικά (Dictionaries)

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

Άσκηση 1. Α. Υπολογίστε χωρίς να εκτελέσετε κώδικα FORTRAN τα παρακάτω: Ποιά είναι η τελική τιμή του Z στα παρακάτω κομμάτια κώδικα FORTRAN:

ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Object Oriented Programming με Python

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

ΠΛΗΡΟΦΟΡΙΚΗ Ι (Python) Ενότητα 4

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στην Python και στο IDLE

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

Τυχαίοι αριθμοί ρίξε μια «ζαριά»

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναδροµικές Συναρτήσεις Χειµερινό Εξάµηνο 2014

Φύλλο Εργασίας 3. Μια γρήγορη επανάληψη από τα προηγούμενα

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Κεφάλαιο. δομές ελέγχου. Περίγραμμα. Στόχοι

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ Python. 1η Ομάδα Ασκήσεων

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο

Εισαγωγή στον Προγραμματισμό Python Μάθημα 4: Συναρτήσεις (functions) και δομοστοιχεία (modules) στην Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Βασικές Ασκήσεις από τα Εργαστήρια της Python. Πέμπτη Εργ. 3 17:15 και 19:15

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Πληροφορική ΙΙ Θεματική Ενότητα 4

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Έλεγχος Ροής - Παραδείγµατα Χειµερινό Εξάµηνο 2014

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Γλώσσες Προγραμματισμού Εφαρμογών - ΜΕΠΒ20

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Σημειωματάριο Δευτέρας 20 Νοε. 2017

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

Σημειωματάριο Τετάρτης 25 Οκτ. 2017

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

Η γλώσσα προγραμματισμού Python

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Έλεγχος Ροής Προγράμματος

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία ΕΙΣΑΓΩΓΙΚΟ ΦΡΟΝΤΙΣΤΗΡΙΟ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Ο πιο κάτω πίνακας περιγράφει σε ποιες περιπτώσεις χρησιμοποιούμε τους τρεις πιο πάνω τρόπους:

Mπαρμπούτι. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Τυχαιότητα

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή

Γλωσσική Τεχνολογία. Εισαγωγικό Φροντιστήριο

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Βασικά στοιχεία γλώσσας προγραμματισμού

ΘΕΜΑ : «Από την ΜicroWorlds Pro στην Python. Μια Βιωματική Διδακτική Πρόταση.»

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Δοκιμή και Αποσφαλμάτωση Testing and Debugging

Κεφάλαιο : Επαναλήψεις (o βρόγχος While) (Διάλεξη 9) Δομές Έλεγχου Προγράμματος

Η βασική συνάρτηση προγράμματος main()

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Transcript:

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

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

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

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

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

Λάθη κατά την εκτέλεση Δεν υπάρχει συντακτικό λάθος, αλλά το πρόγραμμά μας τερματίζει γιατί μπαίνει σε μια μη εγκυρη κατάσταση. >>> 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] Traceback (most recent call last): File "<pyshell#45>", line 1, in <module> lst[3] IndexError: list index out of range 6

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

Λάθη κατά την εκτέλεση Πρέπει να διαβάσουμε και να καταλάβουμε το σφάλμα >>> 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 Traceback (most recent call last): File "<pyshell#49>", line 1, in <module> 2.0**10000 OverflowError: (34, 'Result too large') 8

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

Δημιουργία Εξαιρέσεων Μπορούμε να δημιουργήσουμε εξαίρεση στο πρόγραμμα ή τη συνάρτησή μας αν κάτι δεν είναι έγκυρο με βάση τις προδιαγραφές μας με την εντολή 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 10

«Πιάσιμο» Εξαιρέσεων Μπορούμε να αποφύγουμε να τερματίσει το πρόγραμμά μας, φροντίζοντας να «πιάνουμε» τυχόν εξαιρέσεις 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... 11

«Πιάσιμο» Εξαιρέσεων Μπορούμε να αποφύγουμε να τερματίσει το πρόγραμμά μας, φροντίζοντας να «πιάνουμε» τυχόν εξαιρέσεις 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... 12

Αλλά... 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 13

«Πιάσιμο» Εξαιρέσεων 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 ) οι εξαίρεσεις εξετάζονται με αυτή τη σειρά 14

«Πιάσιμο» Εξαιρέσεων 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) 15

«Πιάσιμο» Εξαιρέσεων 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") μπορούμε να βάλουμε πολλούς τύπους εξαιρέσεων 16

«Πιάσιμο» Εξαιρέσεων 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) Enter the first number: 3a unexpected EOF while parsing (<string>, line 1) αποθηκεύει το αντικείμενο της εξαίρεσης στη μεταβλητή e 17

Χρήση 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 αντιστοιχεί στην περίπτωση που δεν δημιουργήθηκε εξαίρεση. Τότε όλα πήγαν καλά και ο βρόγχος τερματίζει 18

Παράδειγμα Γράψτε μια συνάρτηση που θα μετατρέπει την πρώτη γραμμή ενός αρχείου σε ακέραιο και μετά θα τυπώνει τον ακέραιο 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.') 19

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

Εξαιρέσεις και συναρτήσεις 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 21

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

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

Πιάνοντας εξαιρέσεις Είναι πολύ συνηθισμένο να πιάνουμε την εξαίρεση σε διαφορετικό σημείο από αυτό που δημιουργήθηκε. 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' 26

Παράδειγμα Θέλουμε να γράψουμε μια συνάρτηση 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 27

Παράδειγμα Θέλουμε να γράψουμε μια συνάρτηση describeperson() που να τυπώνει τα υπάρχοντα στοιχεία του προσώπου που της δίνεται σαν όρισμα 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']) Βάζουμε ένα if για κάθε πιθανό στοιχείο! 28

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

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

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

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