Ralat sintaks menghalang program daripada bermula. Ralat masa larian menghentikannya di tengah jalan. Ralat logik membiarkannya selesai dengan jawapan yang salah. Mengetahui yang mana satu menunjukkan anda di mana hendak mencari.
Pelajaran ini menyusuli menguji lekukan dan struktur cabang dalam peralihan ke Python dan pelaksanaan.
Bagaimanakah tiga jenis kesalahan itu berbeza?
| Kesalahan | Bila ia muncul | Apa yang anda lihat | Cara mencarinya |
|---|---|---|---|
| Ralat sintaks | Sebelum apa-apa berjalan | Mesej ralat dan nombor baris | Baca baris itu, semak titik bertindih, kurungan, petikan, = berbanding == |
| Ralat masa larian | Semasa berjalan | Program berhenti dengan mesej | Baca mesej, jejak ke baris itu |
| Ralat logik | Selepas selesai | Keputusan salah, tiada mesej | Uji dengan jawapan diketahui, jejak pengiraan |
Ralat sintaks dan masa larian mengumumkan diri. Ralat logik senyap, jadi ialah ralat yang menyebabkan kehilangan markah apabila anda hanya menyemak “adakah ia berjalan?”.
Contoh berlangkah
Tugasan: cari purata tiga nombor. Uji dengan 6, 9 dan 12, yang purata betulnya (6 + 9 + 12) / 3 = 27 / 3 = 9.
def average(a, b, c):
return a + b + c / 3
print(average(6, 9, 12))
Langkah 1, adakah ia berjalan? Ya. Tiada ralat sintaks atau masa larian, jadi kesalahan, jika ada, terletak pada logik.
Langkah 2, jejak ungkapan. Pembahagian dilakukan sebelum penambahan, jadi Python mengira c / 3 dahulu: 12 / 3 = 4. Kemudian 6 + 9 + 4 = 19.
Langkah 3, banding. 19 bukan 9, jadi ini ralat logik.
Langkah 4, baiki dengan kurungan.
def average(a, b, c):
return (a + b + c) / 3
Kini (6 + 9 + 12) / 3 = 9.0. Python menunjukkan 9.0 kerana / sentiasa memberi hasil perpuluhan.
Kesilapan yang perlu diwaspadai
Satu kesilapan lazim ialah menganggap program tanpa mesej ralat itu betul.
Jawapan yang tersilap: “Saya jalankan dan ia mencetak 19, jadi ia berfungsi.”
Program berjalan, tetapi tiada sesiapa membandingkan 19 dengan 9 yang dijangka. Semakan terhadap jawapan yang diketahui ialah apa yang mendedahkan ralat logik.
Pembetulannya ialah mengira jawapan yang dijangka dengan tangan sebelum menjalankan kod. Kemudian perbandingan memberitahu anda sama ada kesalahan ada pada kod atau pada bacaan anda terhadap soalan.
Ralat sintaks sebenar kelihatan berbeza. Dalam if mark = 50:, satu = ialah penugasan di tempat yang memerlukan perbandingan, jadi Python enggan menjalankannya dan melaporkan ralat sintaks. Pembetulannya if mark == 50:.
Semak kendiri
1. Apakah jenis ralat bagi print("Hi", tanpa kurungan penutup?
Lihat jawapan
Ralat sintaks. Kurungan tidak pernah ditutup, jadi Python tidak dapat membaca baris itu dan program tidak bermula.
2. Fungsi ini sepatutnya memulangkan jumlah senarai. Apakah jenis kesalahannya apabila dipanggil dengan [2, 4]?
def total(values):
t = 0
for n in values:
t = n
return t
Lihat jawapan
Ralat logik. Ia berjalan, tetapi t = n menggantikan jumlah setiap kali dan bukan menambah, jadi ia memulangkan 4, bukan 6. Barisnya sepatutnya t = t + n.
3. Apakah jenis ralat bagi print(10 / 0)?
Lihat jawapan
Ralat masa larian. Kodnya sah, tetapi pembahagian dengan sifar mustahil, jadi program berhenti dengan mesej ZeroDivisionError.
Ke mana pelajaran ini membawa
Seterusnya, gunakan runtime pelayar yang selamat untuk menjalankan contoh ini tanpa risiko. Anda boleh menguji fungsi average dalam kotak pasir penaakulan Python dan membandingkannya dengan pelatih jejak pseudokod terhad.
Jika jawapan salah terus lepas daripada semakan anda sendiri, tuisyen Sains Komputer dalam talian satu dengan satu kami boleh mengusahakan tabiat menguji bersama anda.