[TasPython] Διαλέξτε το στυλ σας

Apostolos Mpessas mpessas at freemail.gr
Sat Sep 4 13:48:49 CEST 2010


On Saturday 04 of September 2010 12:30:09 Dimitris Leventeas wrote:
> On Saturday 04 September 2010 12:07:45 you wrote:
> > Εγώ φταίω να πω, ότι οι εξαιρέσεις (as in OverflowError) "πρέπει" να
> > χρησιμοποιούνται για εξαιρέσεις (as in "exceptions to the rule") και όχι
> > ως δομές ελέγχου; :P
> 
> Ως γενικό κανόνα τον βρίσκω σωστό και πολύ καλή επισήμανση εν προκειμένω. Η
> Python όμως κάνει ήδη χρήση εξαιρέσεων με το StopIteration στα for loop
> όπου το χρησιμοποιεί ως δομή ελέγχου. Το κάνει όμως ωραία και χωρίς να
> μπερδεύει.
>

Σωστό, αλλά μόνο το StopIteration και GeneratorExit δεν έχουν την κατάληξη 
Error ή Warning ;) Επιπλέον, αυτά χρησιμοποιούνται στο iteration protocol της 
Python για user-level κώδικα και στο PEP 234 εξηγεί, γιατί επιλέχθηκε αυτός ο 
τρόπος. (Αν και η Python, όσο το σκέφτομαι, χρησιμοποιεί exceptions σε διάφορα 
σημεία C-x <DEL>)
Τεσπα, υπάρχει το βιβλίο Exceptional C++ που αναφέρεται σε exceptions 
εκτενέστατα και συνιστώ ανεπιφύλακτα (νομίζω είναι σε 2 μέρη).

> Νομίζω, γενικότερα, πως οι εξαιρέσεις είναι για ``εξαιρετικά'' σπάνια
> πράγματα. Εφόσον πετιέται αρκετά σπάνια η εξαίρεση *και* δεν κάνει
> δυσανάγνωστο τον κώδικα, μια χαρά είναι η χρήση της. Το catch (word pun
> intended) είναι πως εδώ ο κώδικας γίνεται πιο δυσανάγνωστος (πέρα του
> γεγονότος ότι για τόσο μικρές τιμές είναι απλά λάθος το να πετάς
> εξαιρέσεις).
> 
> Άλλωστε είναι πως θέτεις τον κανόνα. Εδώ θα μπορούσε να είναι:
> """ Αύξανε συνέχεια τον counter κατά 1. """

Πάντα το θέμα είναι τι ορίζεις "εξαιρετική περίπτωση*" (Το EOF είναι 
εξαιρετική περίπτωση; ). Αν το παρακάνεις, θα επιστρέψουμε στο goto.

Αποστόλης


* exceptional case


More information about the TasPython mailing list