Rumah >pembangunan bahagian belakang >Tutorial Python >Pengendalian Ralat dalam Python: Amalan Terbaik. Terokai cara mengendalikan pengecualian dengan berkesan
Ringkasan:
Ralat program tidak dapat dipulihkan; apabila program menghadapi ralat, ia akan keluar atau ranap serta-merta.
Pengaturcara yang baik memastikan bahawa kod atau perisian mereka boleh mengendalikan ralat/pengecualian yang mungkin timbul semasa penggunaan perisian tanpa ranap atau menghasilkan hasil yang tidak diingini. Bayangkan menulis perisian untuk institusi kewangan yang hanya menerima input angka, jika pengguna memasukkan huruf dan bukannya nombor untuk operasi aritmetik, ini biasanya akan menimbulkan ralat dan perisian akan ranap kerana pengguna tunggal, jika tiada sebarang mekanisme dalam tempat untuk mengendalikan kata-kata ralat. Ini sememangnya bukan perkara yang baik - ia tidak baik untuk perniagaan, boleh menyebabkan pelanggan kecewa, dan seseorang boleh kehilangan pekerjaan kerana ketidakcekapan.
Dalam artikel ini, kami akan mempelajari cara terbaik untuk menangani ralat dalam kod anda yang mungkin timbul akibat interaksi pengguna. nantikan.
Artikel ini sesuai untuk:
Selepas membaca artikel ini, pembaca seharusnya dapat:
Ralat dan Pengecualian sering digunakan secara bergantian, tetapi secara teknikal ia bermaksud perkara yang berbeza. Dalam Python, Ralat dan Pengecualian ialah kedua-dua subkelas BaseException, Ini selanjutnya menunjukkan bahawa walaupun mereka berbeza, mereka mempunyai persamaan.
Ralat tidak dapat dipulihkan; apabila program kami menghadapi ralat, ia akan keluar atau ranap serta-merta. Walaupun anda mungkin menjangkakan ralat, tidak ada cara untuk mengendalikannya secara pemrograman. Beberapa ralat disenaraikan di bawah:
SyntaxError
:Ini adalah salah satu jenis ralat yang paling biasa dihadapi oleh pengaturcara, ia berlaku apabila kod tidak mengikut sintaks Python yang betul dan boleh dikesan semasa menghuraikan. Ini adalah soalan yang mudah timbul untuk pelajar atau orang yang beralih kepada Python daripada bahasa pengaturcaraan lain.
<code class="language-python">name = “Austin”; print(name)</code>
Ini menghasilkan SyntaxError
kerana dalam pernyataan Python tidak berakhir dengan koma bertitik.
IndentationError
:Ralat ini berlaku apabila kod Python diinden dengan tidak betul dan dikesan semasa menghuraikan kod. Lekukan dalam Python sangat penting. Ia adalah satu-satunya cara dalam Python anda boleh menentukan blok kod, tidak seperti kebanyakan bahasa yang menggunakan pendakap kerinting.
<code class="language-python">name = “Austin”; print(name)</code>
Kod ini akan menyebabkan ralat disebabkan lekukan yang tidak betul. Ia sepatutnya:
<code class="language-python">active = True if (active): print(“The user is active”)</code>
Pengecualian dalam Python berlaku pada masa jalan. Tidak seperti ralat, ia boleh dikendalikan dengan betul atau ditangkap secara pengaturcaraan supaya program kami boleh terus berjalan tanpa ranap. Dalam erti kata lain, ia boleh dipulihkan. Berikut ialah beberapa pengecualian biasa dalam Python:
Jenis pengecualian ini adalah sebahagian daripada bahasa pengaturcaraan Python. Sebahagian daripada mereka disenaraikan di bawah:
ValueError
:Ralat ini berlaku apabila parameter yang tidak sah dihantar ke fungsi, walaupun jenisnya mungkin betul.
<code class="language-python">if (active): print(“The user is active”)</code>
Daripada coretan kod di atas, jika kita menghantar rentetan angka ke fungsi, ia akan berjaya menukar kepada nombor, jika tidak, ia akan menghasilkan ValueError
.
<code class="language-python">def str_num(num_string): return(int(string))</code>
TypeError
:Ralat ini timbul apabila parameter jenis yang tidak sesuai dihantar ke fungsi.
<code class="language-python">print(str_num(“123”)) #works perfectly print(str_num(“abc”)) #raises a ValueError</code>
Ini akan mencetuskan TypeError
.
IndexError
:Ralat ini berlaku apabila anda cuba mengakses nilai dalam senarai menggunakan indeks yang salah.
<code class="language-python">def addition(num1, num2): return num1 + num2 # calling the function addition(5, A)</code>
Ini mengakibatkan IndexError
kerana my_list[2]
tidak boleh diakses.
KeyError
:Ralat ini timbul apabila percubaan dibuat untuk mengakses nilai dalam kamus menggunakan kunci yang salah atau tidak wujud.
<code class="language-python">my_list = [“dog”, “cat”] my_list[2]</code>
Ini akan mencetuskan KeyError
.
Anda boleh menemui pengecualian terbina dalam lain di sini.
Pengecualian tersuai ditakrifkan oleh pengaturcara. Di sini, Python membolehkan pengaturcara mentakrifkan syarat secara manual yang perlu diperiksa oleh program semasa pelaksanaan dan membuang pengecualian jika ditemui. Anda boleh mencapai ini dengan mencipta kelas yang mewarisi daripada kelas Exception
.
Pengecualian pengendalian memastikan aplikasi perisian kami mempunyai prestasi yang boleh diramal apabila menghadapi ralat tertentu yang timbul semasa kitaran hayat aplikasi. Dalam bahagian ini, anda akan belajar bagaimana untuk melaksanakan ini dalam pengaturcaraan.
try-except
pernyataantry-except
menyediakan cara selamat untuk mengendalikan kod yang mungkin menimbulkan ralat atau pengecualian. Penyataan try
membalut kod bermasalah atau klausa try
ini adalah bahagian kod yang kemungkinan besar akan menyebabkan keseluruhan program menjadi salah apabila menerima input daripada pengguna, membaca daripada fail, ke sebutkan beberapa contoh.
except
menandakan permulaan klausa except
ini ialah selebihnya kod yang dibalut dalam blok except
. Klausa except
mengendalikan pengecualian yang dibangkitkan dalam blok try
.
Izinkan saya membimbing anda melalui aliran kerja pelaksanaan. Program Python anda biasanya akan dilaksanakan sehingga ia mencapai blok try
yang mengandungi kod "bermasalah", dan jika tiada ralat yang mungkin berlaku semasa melaksanakan kod dalam blok try
pada masa itu, ia akan melangkau blok except
dan teruskan Laksanakan asas kod yang lain. Walau bagaimanapun, jika ralat ditemui semasa melaksanakan kod dalam blok try
, sejurus selepas objek pengecualian dicipta, kawalan melompat ke blok except
di mana ia harus dikendalikan oleh kelas pengecualian yang sepadan.
<code class="language-python">name = “Austin”; print(name)</code>
Daripada coretan kod di atas, jika nilai bukan angka dihantar ke atur cara, objek pengecualian dibuat dan ValueError
dilemparkan. Kawalan segera melompat ke blok except
, di mana ia mengimbas kelas pengecualian yang sesuai. Di sini, kelas ValueError
sudah memadai. Ralat telah dikendalikan dengan betul. Walau bagaimanapun, jika kelas yang betul tidak ditemui, kawalan beralih ke blok try
luar (jika ada), dan jika pengecualian masih tidak dikendalikan dengan betul, program ranap.
except
untuk mengendalikan berbilang kelas pengecualianBoleh menyemak berbilang kelas pengecualian dan mengendalikan pengecualian tertentu. Pendekatan ini lebih disukai jika anda tidak pasti yang mana antara beberapa pengecualian yang menghasilkan pelaksanaan kod. Lihat coretan kod di bawah.
<code class="language-python">active = True if (active): print(“The user is active”)</code>
Exception
ialah subkelas langsung BaseException
. Kelas Exception
ialah kelas asas untuk semua pengecualian bukan maut.
Dalam kebanyakan kes, kelas Exception
mencukupi untuk mengendalikan kebanyakan pengecualian yang dilemparkan semasa pelaksanaan kod.
<code class="language-python">if (active): print(“The user is active”)</code>
Walaupun kelas Exception
boleh mengendalikan pengecualian yang tidak membawa maut, sebaiknya gunakannya dengan berhati-hati. Gunakan kelas Exception
yang betul kerana ia lebih baik untuk nyahpepijat dan meningkatkan kebolehbacaan kod.
finally
Bahagian kod yang dibalut dalam blok finally
akan dilaksanakan tanpa mengira sama ada pengecualian berlaku. Ini menjadikannya sesuai untuk mengendalikan tugas pembersihan;
<code class="language-python">def str_num(num_string): return(int(string))</code>
Mencipta pengecualian tersuai membolehkan pengaturcara mengemukakan pengecualian khusus untuk program perisian. Ini mungkin termasuk keadaan khas atau kes tepi yang mungkin memudaratkan kefungsian program perisian tertentu. Kelas pengecualian tersuai yang ditakrifkan mesti diwarisi daripada kelas Exception
.
<code class="language-python">print(str_num(“123”)) #works perfectly print(str_num(“abc”)) #raises a ValueError</code>
Coretan kod di atas menunjukkan cara membuat dan menggunakan pengecualian tersuai. Bergantung pada kes penggunaan, ia boleh digunakan dengan cara yang lebih kompleks.
Mengapa pengendalian ralat/pengecualian penting
"Jangan percaya pengguna" ialah pepatah biasa dalam kalangan pembangun perisian, yang mengulangi bahawa anda tidak pasti sepenuhnya bagaimana pengguna anda akan berinteraksi dengan aplikasi perisian anda tentang jenis input yang mereka masukkan dan perkara yang anda masukkan , pengaturcara, sedang lakukan semasa menulis aplikasi anda Terdapat beberapa kes sudut lain yang mungkin tidak difikirkan. Beberapa sebab penting untuk pengendalian ralat/pengecualian yang betul dijelaskan di bawah:
Gunakan pengendalian pengecualian:
cuba: cetak(10/0) kecuali ZeroDivisionError: print("Tidak boleh bahagi dengan sifar!")
cetak(bahagi(10, 2)) # Output: 5.0 print(bahagi(10, 0)) # Output: Pembahagian dengan sifar tidak dibenarkan!
Galakkan menulis kod ringkas
Pengendalian pengecualian menjadikan kod anda lebih mudah dibaca, nyahpepijat dan diselenggara dengan mengasingkan logik biasa daripada logik pengendalian ralat.
Memudahkan penyahpepijatan
Dengan mesej ralat terperinci dan log pengecualian, pembangun boleh mengenal pasti dan membetulkan isu dalam kod mereka dengan cepat.
Contoh:
cuba: keputusan=10/0 kecuali Pengecualian sebagai e: logging.error("Ralat berlaku", exc_info=True)
Kesimpulan
Dalam istilah pengaturcaraan, ralat dan pengecualian paling kerap digunakan secara bergantian. Perbezaan utama antara ralat dan pengecualian dalam Python ialah cara ia mempengaruhi program perisian kami. Ralat seperti ralat sintaks dan ralat lekukan boleh ranap program apabila jurubahasa menghuraikannya. Sebaliknya, pengecualian boleh ranap program pada masa jalan jika ia tidak dikendalikan dengan betul. Pengecualian tersuai memanjangkan keupayaan pengendalian ralat dengan membolehkan pengaturcara mentakrifkan kelas pengecualian khusus untuk aplikasi perisian tertentu.
Pengendalian ralat juga sangat penting untuk nyahpepijat. Ia membolehkan kami melihat mengapa ralat berlaku dalam aplikasi, menyediakan penyelenggara perisian dengan maklumat yang mencukupi untuk menyelesaikan masalah. Sentiasa pastikan bahawa pengendalian pengecualian diperkenalkan dengan sewajarnya dalam kod anda untuk memastikan keteguhan aplikasi perisian anda.
Terima kasih kerana membaca.
Atas ialah kandungan terperinci Pengendalian Ralat dalam Python: Amalan Terbaik. Terokai cara mengendalikan pengecualian dengan berkesan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!