|
Όταν μαθαίνετε Python, μπορεί να είναι λίγο περίπλοκο να κατανοήσετε τη σημασία των μηνυμάτων σφάλματος της Python. Ακολουθεί μια λίστα με ορισμένα κοινά σφάλματα χρόνου εκτέλεσης που προκαλούν τη διακοπή λειτουργίας του προγράμματός σας.
1) Ξέχασα να προσθέσω :( στο τέλος του if, elif, else, for, while, class, def def def. Το σφάλμα θα παρουσιαστεί σε κώδικα όπως αυτός: αν spam == 42 print("Γεια!") 2) Χρησιμοποιήστε = αντί για == (με αποτέλεσμα "SyntaxError: μη έγκυρη σύνταξη") = είναι ο τελεστής εκχώρησης και == ισούται με τη λειτουργία σύγκρισης.Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: εάν spam = 42: print("Γεια!") 3) Λανθασμένη χρήση εσοχής. (Με αποτέλεσμα τα "IndentationError:unexpected indent", "IndentationError:unindent does not match any outer indetation level" και "IndentationError:expected an indented block") Να θυμάστε ότι η εσοχή χρησιμοποιείται μόνο μετά από δηλώσεις που τελειώνουν με: μετά την οποία η μορφή εσοχής πρέπει να επανέλθει στην προηγούμενη μορφή εσοχής. Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: print("Γεια!") print("Γεια σου!") Ή: αν spam == 42: print("Γεια!") print("Γεια σου!") Ή: αν spam == 42: print("Γεια!") 4) Ξεχάστε να καλέσετε το len() στη δήλωση βρόχου for (με αποτέλεσμα το αντικείμενο "TypeError: "list" δεν μπορεί να ερμηνευτεί ως ακέραιος") Συνήθως θέλετε να επαναλάβετε μια λίστα ή ένα στοιχείο συμβολοσειράς μέσω ενός ευρετηρίου, το οποίο απαιτεί την κλήση της συνάρτησης range(). Θυμηθείτε να επιστρέψετε την τιμή len αντί να επιστρέψετε αυτήν τη λίστα. Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: spam = ["γάτα", "σκύλος", "ποντίκι"] Για i στην περιοχή (spam): εκτύπωση (spam) 5) Προσπαθήστε να τροποποιήσετε την τιμή της συμβολοσειράς (με αποτέλεσμα "TypeError: Το αντικείμενο "str" δεν υποστηρίζει την εκχώρηση στοιχείων") Η συμβολοσειρά είναι ένας αμετάβλητος τύπος δεδομένων και το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: spam = "Έχω μια κατοικίδια γάτα." spam[13] = "r" εκτύπωση (spam) Και πραγματικά θέλετε να κάνετε αυτό: spam = "Έχω μια κατοικίδια γάτα." spam = spam[:13] + "r" + spam[14:] εκτύπωση (spam) 6) Προσπάθεια συνένωσης τιμών χωρίς συμβολοσειρά με συμβολοσειρές (με αποτέλεσμα "TypeError: Can"t convert "int" object to str σιωπηρά") Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: numEggs = 12 print("Έχω " + numEggs + " eggs.") Και πραγματικά θέλετε να κάνετε αυτό: numEggs = 12 print("Έχω " + str(numEggs) + " eggs.") Ή: numEggs = 12 print("Έχω %s αυγά." % (numEggs)) 7) Ξεχάσατε να βάλετε εισαγωγικά στην αρχή και στο τέλος της συμβολοσειράς (με αποτέλεσμα "SyntaxError: EOL κατά τη σάρωση της κυριολεκτικής συμβολοσειράς") Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός:
print(Γεια!") Ή: print("Γεια!) Ή: myName = "Αλ" print("Το όνομά μου είναι " + myName + . Πώς είσαι;») 8) Ορθογραφικό λάθος ονομάτων μεταβλητών ή συναρτήσεων (με αποτέλεσμα "NameError: το όνομα "fooba" δεν έχει οριστεί") Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: foobar = "Αλ" print("Το όνομά μου είναι " + fooba) Ή: spam = ruond(4.2) Ή: spam = Γύρος(4.2) 9) Ορθογραφικό λάθος στα ονόματα των μεθόδων (με αποτέλεσμα "AttributeError: Το αντικείμενο "str" δεν έχει χαρακτηριστικό "lowerr") Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: spam = "ΑΥΤΟ ΕΙΝΑΙ ΜΕ ΠΕΖΑ." spam = spam.lowerr() 10) Οι αναφορές υπερβαίνουν το μέγιστο ευρετήριο λίστας (με αποτέλεσμα "IndexError: ευρετήριο λίστας εκτός εύρους") Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: spam = ["γάτα", "σκύλος", "ποντίκι"] print(spam[6]) 11) Χρησιμοποιώντας μια τιμή κλειδιού λεξικού που δεν υπάρχει (με αποτέλεσμα "KeyError: 'spam'") Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: spam = {"cat": "Zophie", "dog": "Βασιλικός", "mouse": "Μουστάκια"} print("Το όνομα της ζέβρας του κατοικίδιου ζώου μου είναι " + spam["zebra"]) 12) Προσπάθεια χρήσης Python λέξη-κλειδί ως όνομα μεταβλητής (με αποτέλεσμα "SyntaxError: μη έγκυρη σύνταξη") Python Το κλειδί δεν μπορεί να χρησιμοποιηθεί ως όνομα μεταβλητής, το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: κλάση = "άλγεβρα" Οι λέξεις-κλειδιά Python3 είναι: και, ως, διεκδικώ, σπάω, τάξη, συνεχίζω, def, del, elif, else, εκτός, False, τέλος, για, από, καθολική, if, import, in, is, lambda, None, nonlocal, not, ή, pass, raise, return, Αλήθεια, προσπαθήστε, ενώ, με, υποχωρήστε
13) Χρήση τελεστών προστιθέμενης αξίας σε μια καθορισμένη νέα μεταβλητή (με αποτέλεσμα "NameError: το όνομα "foobar" δεν έχει οριστεί") Μην χρησιμοποιείτε συμβολοσειρές 0 ή null ως αρχικές τιμές κατά τη δήλωση μεταβλητών, έτσι ώστε μια πρόταση spam += 1 που χρησιμοποιεί τον τελεστή αυτόματης αύξησης να ισούται με spam = spam + 1, πράγμα που σημαίνει ότι το spam πρέπει να καθορίσει μια έγκυρη αρχική τιμή. Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: spam = 0 spam += 42 αυγά += 42 14) Χρησιμοποιήστε τοπικές μεταβλητές σε συναρτήσεις πριν ορίσετε τοπικές μεταβλητές (σε αυτήν την περίπτωση, υπάρχει μια καθολική μεταβλητή με το ίδιο όνομα με την τοπική μεταβλητή) (με αποτέλεσμα "UnboundLocalError: τοπική μεταβλητή "foobar" που αναφέρεται πριν από την ανάθεση") Είναι περίπλοκο να χρησιμοποιήσετε μια τοπική μεταβλητή σε μια συνάρτηση με το ίδιο όνομα με μια καθολική μεταβλητή και οι κανόνες χρήσης είναι: εάν κάτι ορίζεται σε μια συνάρτηση, εάν χρησιμοποιείται μόνο στη συνάρτηση, είναι τοπικό και το αντίστροφο. Αυτό σημαίνει ότι δεν μπορείτε να το χρησιμοποιήσετε σε μια συνάρτηση ως καθολική μεταβλητή πριν την ορίσετε. Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: someVar = 42 def myFunction(): print(someVar) someVar = 100 myFunction() 15) Προσπάθεια δημιουργίας λίστας ακεραίων με range() (με αποτέλεσμα "TypeError: το αντικείμενο "range" δεν υποστηρίζει την εκχώρηση στοιχείων") Μερικές φορές θέλετε να λάβετε μια ταξινομημένη λίστα ακεραίων, οπότε η range() φαίνεται σαν ένας καλός τρόπος για να δημιουργήσετε αυτήν τη λίστα. Ωστόσο, πρέπει να θυμάστε ότι η range() επιστρέφει ένα "αντικείμενο εύρους", όχι την πραγματική τιμή της λίστας. Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: spam = εύρος(10) spam[4] = -1 Ίσως αυτό είναι που θέλετε να κάνετε: spam = λίστα(εύρος(10)) spam[4] = -1 (Σημείωση: spam = range(10) λειτουργεί στην Python 2, επειδή στην Python 2 η range() επιστρέφει μια τιμή λίστας, αλλά στην Python 3 δημιουργείται το παραπάνω σφάλμα) 16) Ωραίο σε τελεστή ++ ή -- αυτοαύξησης. (Με αποτέλεσμα "SyntaxError: μη έγκυρη σύνταξη") Εάν είστε συνηθισμένοι σε άλλες γλώσσες όπως C++, Java, PHP κ.λπ., ίσως θελήσετε να δοκιμάσετε να χρησιμοποιήσετε ++ ή -- αύξηση και αφαίρεση μιας μεταβλητής. Δεν υπάρχει τέτοιος τελεστής στην Python. Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: spam = 1 SPAM++ Ίσως αυτό θέλετε να κάνετε: spam = 1 spam += 1 17) Ξέχασα να προσθέσω την παράμετρο self στο πρώτο όρισμα της μεθόδου (με αποτέλεσμα "TypeError: myMethod() δεν παίρνει ορίσματα (1 δεδομένο)") Το σφάλμα παρουσιάζεται σε κώδικα όπως αυτός: κλάση Foo(): def myMethod(): print("Γεια!") a = Foo() a.myMethod()
|