Python Exception Handling: try-except at Best Practices

1. Pangkalahatang-ideya ng Exception Handling sa Python

Ano ang exception handling sa Python?

May mangyari ang hindi inaasahang mga error habang tumatakbo ang programa. Tinatawag ito na “exception”, at kapag naganap ang exception, karaniwang humihinto ang programa. Sa Python, mayroong exception handling upang pangasiwaan ang ganitong mga exception. Sa pamamagitan ng paggamit ng exception handling, maaaring harapin ng programa ang mga error nang maayos at ipagpatuloy ang pagtakbo.

Bakit mahalaga ang exception handling?

Mahalaga ang exception handling upang ang programa ay magpatuloy na gumana sa isang paraan na madaling gamitin ng mga gumagamit kahit na ito ay makatagpo ng error. Bukod dito, sa pagtukoy ng sanhi ng error at pagpapadali ng pag-debug, makakalikha ka ng mas mapagkakatiwalaang programa.

2. try-except na pahayag?

Pangunahing syntax

Python try-except na pahayag ay isinusulat ang code na maaaring magdulot ng error sa loob ng try block, at inilalagay ang pagproseso kapag nagkaroon ng error sa except block. Narito ang pangunahing syntax:
try:
    # code na maaaring magdulot ng error
except SomeError:
    # code na nagpoproseso ng error
try block kapag ang code ay matagumpay na naipatupad, except block ay hindi pinapansin, ngunit kapag nagkaroon ng error, isinasagawa ang angkop na pagproseso para sa tinukoy na exception. Kung ang code sa loob ng try block ay matagumpay na naipatupad, ang except block ay hindi pinapansin, ngunit kapag nagkaroon ng error, isinasagawa ang angkop na pagproseso para sa tinukoy na exception.

Karaniwang halimbawa: Zero Division Error

Kapag sinusubukang mag-divide ng zero, ZeroDivisionError ay nagaganap. Maaaring iproseso ang error na ito sa sumusunod na paraan: Kapag sinubukang mag-divide zero, nagkakaroon ng ZeroDivisionError. Maaaring iproseso ang error na ito tulad ng sumusunod:
try:
    result = 10 / 0
except ZeroDivisionError:
    print("Hindi maaaring mag-divide ng zero")

3. Mga Karaniwang Exception at ang Kanilang Pamamaraan ng Paghawak

1. ZeroDivisionError

Ang exception na ito ay nangyayari kapag sinubukang mag-divide ng zero. Halimbawa, kapag sinubukang hatiin ang isang numero sa 0, awtomatikong itatapon ng Python ang ZeroDivisionError.
try:
    result = 10 / 0
except ZeroDivisionError:
    print("Hindi maaaring hatiin sa zero")

2. ValueError

ValueError ay nangyayari kapag ang isang hindi angkop na halaga ay ipinasa sa isang function o operasyon. Sa sumusunod na halimbawa, sinusubukang i-convert ang isang string na hindi maaaring gawing numero gamit ang int().
try:
    num = int("not_a_number")
except ValueError:
    print("Hindi wastong halaga")

3. Paraan ng Paghawak ng Maramihang Exception

Kung nais mong mag-handle ng maraming exception nang sabay-sabay, maaaring pagsamahin ang mga ito sa isang except na pahayag:
try:
    result = 10 / "string"
except (ZeroDivisionError, TypeError):
    print("May naganap na error")

4. Pagkuha ng Detalye ng Error Gamit ang Exception Object

Pagkuha ng Exception Object Gamit ang as

Sa except na pahayag, maaaring gamitin ang keyword na as upang makuha ang exception object. Sa ganitong paraan, maaaring tingnan ang detalyadong impormasyon ng error o i-log ito.
try:
    a = 10 / 0
except ZeroDivisionError as e:
    print(f"Naganap ang error: {e}")
Sa code na ito, kapag naganap ang ZeroDivisionError, ang mensahe ng error ay naka-imbak sa variable na e, at maaari mong ipakita ang mga detalye nito.
年収訴求

5. Paggamit ng finally block

Ano ang finally?

Ang finally block ay ginagamit upang isulat ang code na palaging isasagawa, kahit na may maganap na exception. Angkop ito para sa mga operasyon na kailangang gawin palagi, tulad ng pagbubukas ng file o paglilinis ng koneksyon sa database.
try:
    file = open("test.txt", "r")
except FileNotFoundError:
    print("Hindi mahanap ang file")
finally:
    print("Natapos na ang pagproseso ng file")

Paglilinis ng mga Resource

Ang finally ay kapaki-pakinabang kapag kailangang siguraduhing palaging pakawalan ang mga resource sa dulo ng programa. Halimbawa, ginagamit ang finally upang matiyak na laging maisasara ang file tulad ng nasa ibaba.
try:
    file = open("data.txt", "r")
    # Operasyon sa file
finally:
    file.close()
Sa ganitong paraan, gamit ang finally block, matitiyak na ang file ay palaging maisasara.

6. Manwal na pag-trigger ng mga exception gamit ang raise

Gampanin ng raise

Sa paggamit ng pahayag na raise, maaaring sadyang magpasimula ng exception ang developer. Dahil dito, maaaring hayagang itapon ang error batay sa pagsusuri ng input o mga kondisyon.
def check_value(value):
    if value < 0:
        raise ValueError("Hindi pinapayagan ang negatibong halaga")

Halimbawa ng custom na exception

Sa pamamagitan ng pag-throw ng error para sa mga tiyak na kondisyon, maaaring maiwasan nang maaga ang hindi wastong input. Dahil dito, posible na maiwasan ang hindi inaasahang pag-uugali.

7. Mga pinakamahusay na kasanayan sa paghawak ng mga exception sa Python

1. Iwasan ang labis na paghawak ng mga exception

Kapag labis na gagamitin ang paghawak ng mga exception, bumababa ang nababasa ng code at nagiging mahirap ang pag-debug. Dapat gamitin ang paghawak ng mga exception lamang sa mga bahagi na mataas ang posibilidad na magka-error, at huwag isama ito sa karaniwang daloy ng programa.

2. Gamitin ang log upang itala ang mga error

Kapag naganap ang isang exception, mahalagang i-log ang mensahe ng error. Sa ganitong paraan, maaaring subaybayan ang sanhi ng error mamaya. Narito ang isang halimbawa gamit ang module na logging.
import logging

try:
    a = 10 / 0
except ZeroDivisionError as e:
    logging.error(f"Naganap ang error: {e}")

3. Iwasan ang malawak na paggamit ng except

Sa paghawak ng mga exception, inirerekomenda na hulihin ang mga tiyak na error hangga’t maaari. Ang paggamit ng malawak na except Exception ay maaaring magpalampas ng mga detalye ng problema, kaya mas mainam na tugunan ang bawat partikular na error nang hiwalay.
侍エンジニア塾