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

Σχετικά έγγραφα
Θέματα Προγραμματισμού Η/Υ

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

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

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

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

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

ΕΞΑΙΡΕΣΕΙΣ. Εξαιρέσεις προκαλούνται. από το σύστηµα. από το πρόγραµµα

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

Χειρισµός Σφαλµάτων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

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

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

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

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

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

Εισαγωγή στη Matlab 2 Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής

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

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

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

Οντοκεντρικός Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

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

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

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

Προγραμματισμός ΙΙ (Java) 4. Διαχείριση εξαιρέσεων

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

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

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

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

Ειδικά Θέματα Προγραμματισμού

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

Αντικειμενοστρεφής Προγραμματισμός

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

Κεφάλαιο 5ο: Εντολές Επανάληψης

Οντοκεντρικός Προγραμματισμός

6. Εξαιρέσεις στη γλώσσα Java

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

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

Βασικά της γλώσσας JAVA

Αντικειμενοστρεφής Προγραμματισμός

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

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

ΕΡΓΑΣΤΗΡΙΟ 16. Χρησιμοποιώντας τον Αποσφαλματιστή (Debugger) του Eclipse

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

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

Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

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

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

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΑΣΚΗΣΗ 3: ΠΡΟΤΑΣΕΙΣ, ΕΚΦΡΑΣΕΙΣ ΚΑΙ ΤΕΛΕΣΤΕΣ

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

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

Κλάσεις στην Python. Δημιουργία κλάσεων

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

for for for for( . */

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Αντικειµενοστρεφής Προγραµµατισµός

Προγραμματισμός Ι. Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Συστήματα Γνώσης. Πρακτικό Κομμάτι Μαθήματος Συναρτήσεις στο CLIPS. Νίκος Βασιλειάδης, Αναπλ. Καθηγητής Τμήμα Πληροφορικής

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

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

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

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

Διάλεξη 1. Πράξεις Τελεστές Έλεγχος Ροής

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

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

Copy of dessin. print 'Genus',1+2^(n-k-1)*(n/4-1) print ''

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

Ordinal Arithmetic: Addition, Multiplication, Exponentiation and Limit

Βασικές Ασκήσεις από τα Εργαστήρια της PYTHON (εβδομάδα 5)

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Shell Scripts: loops / if / test

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

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

Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012

Γενικά (για τις γραπτές εξετάσεις)

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

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

Τιμές και τύποι, μεταβλητές Ένα πρώτο σημαντικό βήμα για να μάθουμε να προγραμματίζουμε είναι να

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

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 12: Ροές και είσοδος/έξοδος αρχείων

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

Λογισµικό (Software SW) Γλώσσες

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

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

Κεφάλαιο : Επαναλήψεις (oι βρόχος While) ( ιάλεξη 9) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εξαιρέσεις. try, catch, finally, throw, throws

a = 10; a = k; int a,b,c; a = b = c = 10;

ηµιουργία ιαλογικών Προγραµµάτων για το Web

Transcript:

Εισαγωγή Εξαιρέσεις ηµήτρης Λεβεντέας 20 Μαΐου 2010

Εισαγωγή Ορισµός Τι είναι Ορισµός Ο χειρισµός εξαιρέσεων είναι µια κατασκευή η οποία µας επιτρέπει να χειριστούµε ειδικές συνθήκες που αλλάζουν την ϕυσιολογική ϱοή του προγράµµατος.

Εισαγωγή Χαρακτηριστικά Μηχανισµός Αν κάτι πάει στραβά η Python εγείρει µια εξαίρεση. Την αναγνωρίζουµε (πχ NameError, TypeError, IndexError). Εκτελούµε ειδικό κώδικα για αυτή την περίπτωση. Αν δεν χειριστούµε µια εξαίρεση που εγείρεται, τότε το πρόγραµµα µας σταµατάει την εκτέλεση του. Εξαιρέσεις που δεν έχουν χειριστεί, εµφανίζονται στο traceback. Μας ενηµερώνει τι ακριβώς συνέβει.

Εισαγωγή ιαίρεση µε το µηδέν >>> 8/ 0 Traceback ( most recent c a l l l a s t ) : F i l e " < s t d i n > ", l i n e 1, i n <module> Z e r o D i v i s i o n E r r o r : i n t d i v i s i o n or modulo by zero

Εισαγωγή ιαίρεση µε το µηδέν (χειρισµός) >>> t r y :... 8/0... except Z e r o D i v i s i o n E r r o r :... p r i n t ( ' Could not make the d i v i s i o n ' )... Could not make the d i v i s i o n

Εισαγωγή Μη ορισµένη µεταβλητή >>> a * 5 Traceback ( most recent c a l l l a s t ) : F i l e " < s t d i n > ", l i n e 1, i n <module> NameError : name 'a ' i s not defined

Εισαγωγή Μη δυνατή πράξη >>> b = None >>> b * 7 Traceback ( most recent c a l l l a s t ) : F i l e " < s t d i n > ", l i n e 1, i n <module> T y p e E r r o r : unsupported operand type ( s ) f o r * : ' NoneType ' and ' i n t '

Εισαγωγή Μη υπαρκτό αρχείο >>> w ith open ( ' 3 B i r d s A r e S i t t i n g. mp3 ', ' r ' ) as f :... f. read ( )... Traceback ( most recent c a l l l a s t ) : F i l e " < s t d i n > ", l i n e 1, i n <module> I O E r r o r : [ E r r n o 2] No such f i l e or d i r e c t o r y : ' 3 B i r d s A r e S i t t i n g. mp3 '

Εισαγωγή Είσοδος από Χρήστη while True : t r y : x = i n t ( i n p u t ( " Please enter a number : " ) ) break except V a l u e E r r o r : p r i n t ( " Not a number. T r y again... " ) p r i n t ( x )

Εισαγωγή Ολα σε ένα... except ( R u n t i m e E r r o r, T y p e E r r o r, NameError ) :... pass

Εισαγωγή Στην τελική... (except:) import s y s t r y : f = open ( ' m y f i l e. t x t ' ) s = f. r e a d l i n e ( ) i = i n t ( s. s t r i p ( ) ) except I O E r r o r as e r r : p r i n t ( " I /O e r r o r : { } ". format ( e r r ) ) except V a l u e E r r o r : p r i n t ( " Could not convert data to an i n t e g e r. " ) except : p r i n t ( " Unexpected e r r o r : ", s y s. e x c _ i n f o ( ) [ 0 ] ) r a i s e

Γενικά Μηχανισµός 1 Οι δηλώσεις του try µπλοκ εκτελούνται. 2 Αν καµία εξαίρεση δεν συµβεί, δεν εκτελείται το µπλοκ του except. 3 Μόλις συµβεί µια εξαίρεση στο try µπλοκ, σταµατάει η εκτέλεση του και πάµε στο except. 4 Ψάχνουµε για except µπλοκ του συγκεκριµένου τύπου εξαίρεσης. 5 Αν ϐρεθεί, εκτελούνται οι δηλώσεις του. 6 Αν δεν ϐρεθεί, η εξαίρεση περνάει στο εξωτερικό try µπλοκ. 7 Αν η εξαίρεση δεν χειριστεί καθόλου, σταµατάει η εκτέλεση του προγράµµατος.

Κανόνες Κανόνες 1 Χρήση της δοµής του µηχανισµού εξαιρέσεων µόνο για πράγµατα που αλλάζουν απροσδόκητα την ϱοή προγράµµατος. 2 Ελάχιστος κώδικας µέσα σε κάθε try µπλοκ.

Κανόνες Κανόνες 1 Χρήση της δοµής του µηχανισµού εξαιρέσεων µόνο για πράγµατα που αλλάζουν απροσδόκητα την ϱοή προγράµµατος. 2 Ελάχιστος κώδικας µέσα σε κάθε try µπλοκ.

try:... else:... t r y : f = open ( ' m y f i l e. t x t ' ) except I O E r r o r as e r r : p r i n t ( " I /O e r r o r : { } ". format ( e r r ) ) else : s = f. r e a d l i n e ( ) p r i n t ( ' The f i r s t l i n e of f i s : ', s ) f. close ( )

Τι συµβαίνει 1 Εκτελείται ο κώδικας µέσα στο µπλοκ try. 2 Αν συµβεί εξαίρεση µεταφερόµαστε στο µπλοκ except. 3 Αλλιώς (αν δεν συµβεί εξαίρεση) πηγαίνουµε στο µπλοκ else. 4 Πρέπει να είναι µετά από όλα τα µπλοκ except.

finally # how many t i m e s we have requested f o r i n p u t t i m e s = 0 while True : t r y : x = i n t ( i n p u t ( " Please enter a number : " ) ) break except V a l u e E r r o r : p r i n t ( " Not a number. T r y again... " ) f i n a l l y : t i m e s += 1 p r i n t ( ' Requested i n p u t ', t i m e s )

Τι συµβαίνει 1 Ο,τι και να γίνει (συµβεί εξαίρεση ή όχι) εκτελείται ο κώδικας στο finally. 2 Χρήσιµο όταν ϑέλουµε να απελευθερώσουµε πόρους, ανεξάρτητα από το αν χρησιµοποιήθηκαν επιτυχώς ή όχι.

Ορίσµατα Εξαιρέσεων t r y : r a i s e Exception ( 'Can you handle i t? ' ) except Exception as i n s t : p r i n t ( i n s t. args ) p r i n t ( i n s t )

Τι συµβαίνει 1 Είναι ορίσµατα που περιγράφουν τι ακριβώς έγινε µε την εξαίρεση. 2 Οι εξαιρέσεις κληρονοµούν από µια κλάση (Exception). 3 Αυτή η κλάση παρέχει το args στα στιγµυότυπα της όπου υπάρχουν τα ορίσµατα της εξαίρεσης. 4 Παρέχεται και η µέθοδος str () ώστε να µπορούµε να τα τυπώνουµε απευθείας.

Εγείροντας Εξαιρέσεις >>> r a i s e NameError ( ' T e s s e r a P o u l a k i a K a 8 o n t a i ' ) Traceback ( most recent c a l l l a s t ) : F i l e " < s t d i n > ", l i n e 1, i n <module> NameError : T e s s e r a P o u l a k i a K a 8 o n t a i

Εγείροντας Εξαιρέσεις (2) >>> r a i s e NameError Traceback ( most recent c a l l l a s t ) : F i l e " < s t d i n > ", l i n e 1, i n <module> NameError

Τι συµβαίνει 1 Με την raise µπορούµε να εγείρουµε µια εξαίρεση. 2 Η εξαίρεση µπορεί να είναι ένα στιγµυότυπο ή µια κλάση εξαιρέσεων. 3 Σηµαντικό: Θεωρητικά, κάθε κλάση πρέπει να είναι υποκλάση της BaseException. 4 Πρακτικά, κάθε κλάση πρέπει να είναι υποκλάση της Exception.

ικές µας εξαιρέσεις >>> c l a s s MyError ( Exception ) :... def i n i t ( s e l f, value ) :... s e l f. value = value... def s t r ( s e l f ) :... r e t u r n r e p r ( s e l f. value )

ικές µας εξαιρέσεις (2) >>> t r y :... r a i s e MyError ( 4 )... except MyError as e :... p r i n t ( 'My exception occurred : ', e )... My exception occurred : 4

ικές µας εξαιρέσεις (3) >>> r a i s e MyError ( ' oops! ' ) Traceback ( most recent c a l l l a s t ) : F i l e " < s t d i n > ", l i n e 1, i n? main. MyError : ' oops! '

Επίλογος Ευχαριστώ