Catch Me If You Can: Panduan Penanganan Pengecualian dengan Python

May 09 2023
Buka potensi penuh Python melalui manajemen pengecualian cerdas Sebagai pengembang perangkat lunak, berurusan dengan pengecualian sering dianggap sebagai kejahatan yang diperlukan. Namun, penguasaan sistem penanganan pengecualian Python dapat membuat Anda menjadi pemrogram yang lebih efisien dan efektif.

Buka potensi penuh Python melalui manajemen pengecualian cerdas

Foto oleh Cookie the Pom di Unsplash

Sebagai pengembang perangkat lunak, berurusan dengan pengecualian sering dianggap sebagai kejahatan yang diperlukan. Namun, penguasaan sistem penanganan pengecualian Python dapat membuat Anda menjadi pemrogram yang lebih efisien dan efektif.

Dalam posting blog ini, saya akan memberikan penjelasan mendalam tentang hal-hal berikut:

  • Apa itu Penanganan Pengecualian?
  • Perbedaan Antara ifPernyataan dan Penanganan Pengecualian
  • Menggunakan elsedan finallyKlausul untuk Manajemen Kesalahan yang Tepat
  • Mendefinisikan Pengecualian Khusus
  • Praktik Terbaik untuk Penanganan Pengecualian

penanganan pengecualian adalah proses penulisan kode untuk menangkap dan menangani kesalahan atau pengecualian yang mungkin terjadi selama eksekusi program. Ini memungkinkan pengembang untuk menulis kode yang kuat yang terus berjalan bahkan saat menghadapi kejadian atau kesalahan yang tidak terduga, daripada mogok sepenuhnya.

Saat pengecualian terjadi, Python mencari penangan pengecualian yang cocok. Kode handler akan mengeksekusi dan mengambil tindakan yang sesuai, seperti mencatat kesalahan, menampilkan pesan kesalahan, atau mencoba memulihkan dari kesalahan. Secara keseluruhan, penanganan pengecualian membantu membuat aplikasi Python lebih andal, dapat dipelihara, dan lebih mudah di-debug.

Perbedaan Antara ifPernyataan dan Penanganan Pengecualian

Perbedaan utama antara ifpernyataan dan penanganan pengecualian di Python terletak pada tujuan dan skenario penggunaannya masing-masing.

Pernyataan tersebut ifberfungsi sebagai blok bangunan dasar untuk pemrograman terstruktur. Itu mengevaluasi suatu kondisi dan mengeksekusi blok kode yang berbeda berdasarkan apakah kondisinya benar atau salah. Berikut contohnya:

temperature = int(input("Please enter temperature in Fahrenheit: "))
if temperature > 100:
    print("Hot weather alert! Temperature exceeded 100°F.")
elif temperature >= 70:
    print("Warm day ahead, enjoy sunny skies.")
else:
    print("Bundle up for chilly temperatures.")

Pengecualian digunakan untuk menandai masalah dan menunjukkan area dalam kode yang memerlukan peningkatan, debug, atau tindakan pemeriksaan kesalahan tambahan. Mereka memungkinkan Python menangani situasi yang salah dengan anggun dan terus mengeksekusi skrip daripada menghentikannya secara tiba-tiba.

Pertimbangkan contoh berikut tentang bagaimana Anda dapat menerapkan penanganan pengecualian untuk mengelola potensi kegagalan yang terkait dengan pembagian dengan nol dengan lebih baik:

# Define a function that tries to divide a number by zero
def divide(x, y):
    result = x / y
    return result
# Call the divide function with x=5 and y=0
result = divide(5, 0)
print(f"Result of dividing {x} by {y}: {result}")

Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
ZeroDivisionError: division by zero attempted

Kami dapat menangani pengecualian di atas dengan menggabungkan panggilan ke fungsi "divide" di dalam try-exceptblok seperti ini:

# Define a function that tries to divide a number by zero
def divide(x, y):
    result = x / y
    return result
# Call the divide function with x=5 and y=0
try:
    result = divide(5, 0)
    print(f"Result of dividing {x} by {y}: {result}")
except ZeroDivisionError:
    print("Cannot divide by zero.")

Cannot divide by zero.

Untuk informasi lebih lanjut tentang Pengecualian bawaan di Python, Anda dapat merujuk ke [2] .

Menggunakan Else dan Klausul Terakhir untuk Manajemen Kesalahan yang Benar

Saat bekerja dengan pengecualian di Python, disarankan untuk memasukkan keduanya elsedan finallyklausa di blok Anda try-except. Klausa elsememungkinkan Anda untuk menentukan apa yang harus terjadi jika tidak ada pengecualian yang dimunculkan, sedangkan klausa finallymemastikan bahwa operasi pembersihan tertentu selalu dilakukan terlepas dari apakah pengecualian terjadi [1] [2] .

Misalnya, pertimbangkan skenario di mana Anda ingin membaca data dari file dan melakukan beberapa operasi pada data tersebut. Jika terjadi pengecualian saat membaca file, Anda mungkin ingin mencatat kesalahan dan berhenti memproses lebih lanjut, tetapi Anda tetap ingin menutup file dengan benar.

Menggunakan klausa elsedan finallyakan memungkinkan Anda melakukan hal itu - memproses data secara normal jika tidak terjadi pengecualian, atau menangani pengecualian apa pun dengan tepat sambil tetap menutup file pada akhirnya. Tanpa klausa ini, kode Anda akan rentan terhadap kebocoran sumber daya atau penanganan kesalahan yang tidak lengkap. Dengan demikian, mereka memainkan peran penting dalam membuat program yang kuat dan andal.

try:
    # Open the file in read mode
    file = open("file.txt", "r")
    print("Successful opened the file")
except FileNotFoundError:
    # Handle missing files
    print("File Not Found Error: No such file or directory")
    exit()
except PermissionError:
    # Handle permission issues
    print("Permission Denied Error: Access is denied")
else:
    # All good, do something with the file data
    content = file.read().decode('utf-8')
    processed_data = process_content(content)
    
# Cleanup after ourselves even if an exception occurred above
finally:
    file.close()

Jika tidak, ketika tidak ada pengecualian yang terjadi di dalam tryblok, kami melanjutkan dengan memproses konten file di elsecabang. Terakhir, operasi pembersihan yang dipastikan oleh finallyblok menutup file terlepas dari apakah pengecualian dimunculkan lebih awal atau tidak [1] .

Dengan mengadopsi pendekatan terstruktur seperti ini, kode Anda tetap teratur dan mudah diikuti sambil memperhitungkan potensi kesalahan yang mungkin timbul dari interaksi dengan sistem atau input eksternal.

Mendefinisikan Pengecualian Khusus

Di Python, Anda dapat menentukan pengecualian khusus dengan mensubklasifikasikan pengecualian bawaan seperti Exceptionatau kelas lain yang mewarisi langsung dari Exception.

Untuk melakukannya, Anda perlu membuat kelas baru yang mewarisi dari salah satu pengecualian dasar ini dan menambahkan atribut khusus untuk kebutuhan Anda. Anda kemudian dapat menggunakan kelas pengecualian yang baru Anda tentukan di seluruh kode Anda, sama seperti Anda akan menggunakan kelas pengecualian bawaan lainnya.

Berikut adalah contoh mendefinisikan pengecualian khusus yang disebut InvalidEmailAddress:

class InvalidEmailAddress(ValueError):
    def __init__(self, message):
        super().__init__(message)
        self.msgfmt = message

Anda dapat mengajukan pengecualian ini setiap kali menemukan format alamat email yang tidak valid:

def send_email(address):
    if isinstance(address, str) == False:
        raise InvalidEmailAddress("Invalid email address")
# Send email

>>> send_email(None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/path/to/project/main.py", line 8, in send_email
    raise InvalidEmailAddress("Invalid email address")
InvalidEmailAddress: Invalid email address

Berikut adalah beberapa praktik terbaik terkait penanganan error di Python:

  1. Desain untuk kegagalan : Rencanakan ke depan dengan mempertimbangkan kemungkinan kegagalan dan rancang program Anda untuk menanganinya dengan anggun. Ini berarti mengantisipasi kasus tepi dan menerapkan penangan kesalahan yang sesuai.
  2. Gunakan pesan kesalahan deskriptif : Berikan pesan atau log kesalahan mendetail yang membantu pengguna memahami apa yang salah dan alasannya. Hindari pesan kesalahan umum seperti "Kesalahan terjadi" atau "Sesuatu yang buruk terjadi". Sebagai gantinya, tampilkan pesan ramah yang menyarankan solusi atau berikan tautan ke dokumentasi. Pastikan untuk mencapai keseimbangan antara memberikan instruksi mendetail dan menghindari kekacauan UI dengan konten asing.
  3. Minimalkan efek samping : Minimalkan konsekuensi dari tindakan yang gagal dengan mengisolasi bagian kode yang bermasalah melalui blok try-finally atau try-with-resources. Pastikan tugas pembersihan selalu dijalankan terlepas dari keberhasilan atau kegagalan hasil.
  4. Uji secara menyeluruh : Uji secara menyeluruh: Pastikan penangan pengecualian Anda berperilaku dengan benar dalam berbagai skenario dengan menjalankan pengujian komprehensif.
  5. Refactor secara teratur : Refactor segmen kode rawan kesalahan untuk meningkatkan keandalan dan kinerjanya. Pertahankan basis kode Anda tetap modular dan digabungkan secara longgar, memungkinkan bagian independen berkembang secara independen tanpa memengaruhi bagian lain secara negatif.
  6. Catat peristiwa penting: Lacak kejadian menarik di aplikasi Anda dengan mencatatnya ke file atau output konsol. Ini membantu Anda mendiagnosis masalah dengan cepat tanpa harus menyaring log tidak terstruktur dalam jumlah besar.

Menulis kode penanganan kesalahan merupakan bagian integral dari pengembangan perangkat lunak, terutama saat bekerja dengan Python, karena memungkinkan pengembang membangun aplikasi yang lebih andal dan tangguh. Dengan mengikuti standar industri dan praktik terbaik, developer dapat mengurangi waktu debug, memastikan kualitas kode, dan memberikan pengalaman pengguna yang lebih baik.

Sumber daya

[1]https://docs.python.org/3/tutorial/errors.html

[2]https://www.geeksforgeeks.org/python-exception-handling/