DedSec Project

Παραδείγματα σφαλμάτων: Python και JavaScript — DedSec Project

Παραδείγματα σφαλμάτων: Python και JavaScript Python: μεταβαλλόμενη προεπιλεγμένη παράμετρος Λανθασμένο παράδειγμα — ΜΗ ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ Διορθωμένο παράδειγμα Αιτία σφάλματος και εξήγηση…

Python: μεταβαλλόμενη προεπιλεγμένη παράμετρος

Λανθασμένο παράδειγμα — ΜΗ ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ

def add(item, items=[]):
    items.append(item)
    return items

Διορθωμένο παράδειγμα

def add(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items

Αιτία σφάλματος και εξήγηση διόρθωσης

Μια προεπιλεγμένη λίστα δημιουργείται μία φορά και χρησιμοποιείται από όλες τις κλήσεις.

Έλεγξε imports, υπογραφή συνάρτησης και περιβάλλον: τα τμήματα μπορεί να χρειάζονται ενσωμάτωση πριν εκτελεστούν.

Πραγματική αιτία

Μια λίστα ως default δημιουργείται κατά το function definition και μοιράζεται σε ξεχωριστές κλήσεις χωρίς argument. Η fixed function δημιουργεί νέα λίστα εκτός αν caller δώσει ρητά collection.

Επαναλήψιμο regression πείραμα

Κάλεσε broken function με 'Ada' και μετά 'Grace'. Η δεύτερη έξοδος περιέχει και τα δύο. Κάλεσε fixed function δύο φορές με ανεξάρτητα outputs και μετά πέρασε ρητά shared list.

Κριτήριο: κράτησε test του αρχικού bug, έλεγξε fixed έκδοση σε normal και boundary case και μην επεξεργάζεσαι πραγματικά δεδομένα χρήστη.

Python: λείπει η κωδικοποίηση

Λανθασμένο παράδειγμα — ΜΗ ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ

text = open("notes.txt").read()

Διορθωμένο παράδειγμα

from pathlib import Path
text = Path("notes.txt").read_text(encoding="utf-8")

Αιτία σφάλματος και εξήγηση διόρθωσης

Η ρητή UTF-8 διατηρεί σωστά τα ελληνικά κείμενα.

Πραγματική αιτία

Τα text files περιέχουν bytes, όχι δεδομένο Python encoding. Λάθος codec αλλοιώνει ή απορρίπτει χαρακτήρες· η καταστολή Unicode errors με ignore χάνει πληροφορία.

Επαναλήψιμο regression πείραμα

Γράψε 'Καλημέρα' σε προσωρινό UTF-8 file και σύγκρινε bytes με code points. Δοκίμασε invalid byte fixture και διάβασε UnicodeDecodeError χωρίς να αλλάξεις original.

Python: κρυμμένες εξαιρέσεις

Λανθασμένο παράδειγμα — ΜΗ ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ

try:
    work()
except Exception:
    pass

Διορθωμένο παράδειγμα

try:
    work()
except ValueError as exc:
    print(f"Invalid value: {exc}")

Αιτία σφάλματος και εξήγηση διόρθωσης

Πιάσε μόνο αναμενόμενα σφάλματα και εμφάνισέ τα.

Πραγματική αιτία

Ένα γενικό except που επιστρέφει κενό αποτέλεσμα κάνει αποτυχία να μοιάζει επιτυχία. Ο σωστός χειρισμός γίνεται σε layer που ξέρει αν απαιτείται retry, εξήγηση ή abort.

Επαναλήψιμο regression πείραμα

Προκάλεσε ValueError σε parser και FileNotFoundError στο file-reading boundary. Μόνο αναμενόμενα errors πρέπει να μετατρέπονται σε μηνύματα· programming bugs να φαίνονται στα tests.

JavaScript: λανθασμένη σύγκριση

Λανθασμένο παράδειγμα — ΜΗ ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ

if (count = 3) console.log("three");

Διορθωμένο παράδειγμα

if (count === 3) console.log("three");

Αιτία σφάλματος και εξήγηση διόρθωσης

Η ανάθεση δεν είναι σύγκριση· προτίμησε αυστηρή ισότητα.

Πραγματική αιτία

Η loose equality κάνει coercion: string '0' μπορεί να θεωρηθεί ίσο με number 0. Η strict equality διατηρεί τη διαφορά, αλλά η μετατροπή input χρειάζεται ξεχωριστό validation.

Επαναλήψιμο regression πείραμα

Σύγκρινε ('0',0), (false,0) και (null,undefined) με ==/===. Μετέτρεψε ρητά τον επιθυμητό input type πριν comparison.