Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amalan Terbaik untuk Melaksanakan Pengendalian Pengecualian dalam Python

Amalan Terbaik untuk Melaksanakan Pengendalian Pengecualian dalam Python

PHPz
PHPzasal
2024-08-27 06:07:02731semak imbas

Best Practices for Implementing Exception Handling in Python

Menulis kod pengendalian pengecualian yang berkesan adalah penting untuk mencipta aplikasi yang mantap dan boleh diselenggara.
Berikut ialah beberapa amalan terbaik untuk menulis kod pengendalian pengecualian dalam Python:

1. Tangkap Hanya Apa yang Boleh Anda Tangani

Tegaskan:

  • Tangkap pengecualian khusus daripada menggunakan klausa kecuali luas.
  • Ini memastikan bahawa hanya pengecualian yang anda jangkakan dan tahu cara mengendalikan ditangkap.
try:
    # Code that might raise an exception
except ValueError as e:
    print(f"Value error occurred: {e}")

2. Elakkan Bare kecuali: Klausa

Tangkap pengecualian khusus:

  • Elakkan menggunakan kecuali: tanpa menyatakan jenis pengecualian.
  • Ini boleh menangkap ralat yang tidak dijangka dan menyukarkan penyahpepijatan.
try:
    # Code that might raise an exception
except Exception as e:  # Catch all exceptions if necessary
    print(f"An error occurred: {e}")

3. Gunakan cuba-kecuali-lain-akhirnya Blok

  • cuba: Letakkan kod yang mungkin menimbulkan pengecualian di sini.
  • kecuali: Mengendalikan pengecualian dalam blok ini.
  • else: Jalankan blok ini jika tiada pengecualian dibangkitkan dalam blok cuba.
  • akhirnya: Laksanakan blok ini tanpa mengira sama ada pengecualian telah dibangkitkan, selalunya digunakan untuk pembersihan.
try:
    # Code that might raise an exception
except ValueError as e:
    print(f"Value error: {e}")
else:
    print("No exceptions occurred.")
finally:
    print("This will always be executed.")

4. Pengecualian Log

  • Gunakan modul pengelogan untuk mengelog pengecualian.
  • Pengelogan membantu mendiagnosis isu dalam pengeluaran tanpa mendedahkan ralat kepada pengguna akhir.
import logging

logging.basicConfig(level=logging.ERROR)

try:
    # Code that might raise an exception
except Exception as e:
    logging.error(f"An error occurred: {e}")

5. Tingkatkan Semula Pengecualian Apabila Perlu

  • Jika anda mendapat pengecualian tetapi tidak dapat mengendalikannya sepenuhnya, pertimbangkan untuk menaikkannya semula supaya ia boleh dikendalikan di tempat lain.
try:
    # Code that might raise an exception
except ValueError as e:
    logging.error(f"Value error: {e}")
    raise  # Re-raise the exception

6. Gunakan Pengurus Konteks untuk Pengurusan Sumber

  • Gunakan pengurus konteks (dengan pernyataan) untuk mengurus sumber seperti fail, soket atau sambungan pangkalan data.
  • Ini memastikan sumber dikeluarkan dengan betul walaupun pengecualian dinaikkan.
with open('file.txt', 'r') as file:
    content = file.read()

7. Kemerosotan Anggun

-Daripada membenarkan aplikasi anda ranap, sediakan mekanisme sandaran atau mesej ralat mesra pengguna.

  • Sebagai contoh, jika fail konfigurasi tiada, anda mungkin menggunakan tetapan lalai.
try:
    with open('config.json', 'r') as file:
        config = json.load(file)
except FileNotFoundError:
    print("Config file not found, using defaults.")
    config = {"default": "value"}

8. Elakkan Pengecualian Menelan

  • Jangan tangkap pengecualian tanpa mengambil sebarang tindakan.
  • Mengabaikan pengecualian boleh menyembunyikan pepijat dan membuat aplikasi berkelakuan tidak dapat diramalkan.
try:
    # Code that might raise an exception
except Exception as e:
    pass  # Bad practice - you're ignoring the error

9. Pengecualian Dokumen

  • Gunakan rentetan dokumen untuk mendokumentasikan pengecualian yang boleh dibangkitkan oleh fungsi anda.
  • Ini membantu pembangun lain memahami pengecualian yang diharapkan dan cara mengendalikannya.
def divide(a, b):
    """
    Divides two numbers.

    :param a: Numerator.
    :param b: Denominator.
    :return: The result of the division.
    :raises ZeroDivisionError: If the denominator is zero.
    """
    if b == 0:
        raise ZeroDivisionError("Cannot divide by zero.")
    return a / b

10. Gunakan Pengecualian Tersuai Apabila Sesuai

  • Buat pengecualian tersuai untuk mewakili keadaan ralat tertentu dalam aplikasi anda.
  • Ini boleh menjadikan kod anda lebih mudah dibaca dan lebih mudah diselenggara.
class InvalidInputError(Exception):
    """Exception raised for invalid inputs."""
    pass

def process_input(value):
    if not isinstance(value, int):
        raise InvalidInputError("Input must be an integer.")
    return value * 2

11. Pengendalian Pengecualian Ujian

  • Tulis ujian untuk memastikan pengendalian pengecualian anda berfungsi seperti yang diharapkan.
  • Gunakan rangka kerja seperti unittest atau pytest untuk menguji kedua-dua kes biasa dan luar biasa.
def test_divide():
    assert divide(10, 2) == 5
    with pytest.raises(ZeroDivisionError):
        divide(10, 0)

12. Elakkan Penggunaan Terlalu Banyak Pengecualian

Gunakan pengecualian untuk kes luar biasa:

  • Pengecualian harus digunakan untuk keadaan yang tidak dijangka, bukan sebagai mekanisme aliran kawalan biasa.
  • Sebagai contoh, elakkan menggunakan pengecualian untuk mengendalikan keadaan yang boleh diramal seperti penghujung gelung.
# Bad practice: using exceptions for control flow
try:
    while True:
        value = next(iterator)
except StopIteration:
    pass  # End of iteration

13. Pengecualian Rantaian untuk Konteks

  • Python membenarkan anda merantai pengecualian untuk mengekalkan konteks asal apabila menimbulkan pengecualian baharu.
  • Gunakan dari untuk memautkan pengecualian berkaitan.
try:
    result = process_input(input_value)
except InvalidInputError as e:
    raise ValueError("Failed to process input") from e

Dengan mengikuti amalan terbaik ini, anda boleh menulis kod pengendalian pengecualian yang lebih mantap, boleh diselenggara dan boleh dibaca yang mengurus ralat dengan anggun dan meningkatkan kebolehpercayaan aplikasi anda.


resoures

  • Dokumentasi Rasmi Python tentang Pengendalian Pengecualian
  • Dokumentasi Modul pengelogan Python
  • PEP 8 - Panduan Gaya untuk Kod Python (untuk amalan pengekodan umum termasuk pengecualian)
  • Sawa Sebenar - Pengendalian Pengecualian

Atas ialah kandungan terperinci Amalan Terbaik untuk Melaksanakan Pengendalian Pengecualian dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn