Gabay sa Exception Handling ng Python: Error Handling

1. Introduksyon: Ang kahalagahan ng exception handling sa Python

Sa programming, hindi maiiwasan ang mga exception at error. Gayunpaman, sa pamamagitan ng tamang paghawak ng mga exception, maaaring maiwasan ang hindi inaasahang pag-hinto ng programa at makapagbigay ng angkop na mensahe ng error sa mga gumagamit. Sa Python, mayroong malakas na mekanismo para sa paghawak ng mga ganitong exception. Sa paggamit ng exception handling, tataas ang pagiging maaasahan ng programa at magiging mas maayos ang pag-andar nito. Halimbawa, kung ang isang gumagamit ay magsasagawa ng paghahati sa zero o susubukang magbukas ng file na hindi umiiral, kung walang exception handling, agad na titigil ang programa. Ngunit sa pamamagitan ng tamang paghawak ng mga exception, maaaring ipagpatuloy ang programa o magpakita ng malinaw na mensahe ng error sa gumagamit.

2. Paghawak ng Exception sa Python: Pangunahing Sintaks at Daloy

Sa Python, pangunahing tatlong keyword ang ginagamit para sa paghawak ng exception: try, except, at finally.

2.1 try para sa pagtuklas ng error

try statement ay ginagamit upang balutin ang mga prosesong maaaring magdulot ng error. Halimbawa, mga operasyon sa network, pagproseso ng file, input ng user, at iba pang mga bahagi na maaaring mag‑error sa runtime ay nilalagay sa loob ng try block.
try:
    result = 10 / 0
except:
    print("Naganap ang error")
Sa halimbawa sa itaas, ang hindi wastong operasyon na 10 / 0 ay nagdudulot ng exception, at ang except block ay isinasagawa.

2.2 except para sa pagproseso ng error

except statement ay nagha‑catch ng nangyaring exception at nagpoproseso nito. Kapag nag‑error, tinitiyak nito na hindi mag‑behave ang programa nang hindi inaasahan, sa pamamagitan ng tamang pag‑handle gamit ang except. Maaari ring mag‑define ng iba’t ibang pag‑proseso depende sa uri ng exception.
try:
    print(a)
except NameError:
    print("Hindi pa naideklara ang variable")
except ZeroDivisionError:
    print("Hindi maaaring hatiin ng 0")
Sa ganitong paraan, maaaring mag‑set ng indibidwal na pag‑proseso para sa maraming exception.

2.3 finally para sa tiyak na pag‑release ng resources

finally statement ay isang block na palaging isinasagawa, kahit na may exception. Kapag gumagamit ng file operations o network resources, ginagamit ito upang siguraduhing laging nare‑release ang resources kahit na may exception.
try:
    file = open("test.txt", "r")
finally:
    file.close()
Sa ganitong mga sitwasyon, tulad ng file operations o database connections, napaka‑kapaki‑pakinabang ng finally para matiyak ang maayos na pamamahala ng resources.

3. Mga Karaniwang Exception at ang Kanilang Pamamaraan ng Paghawak

Sa Python, maraming uri ng mga exception ang inihanda. Narito ang ilang pangunahing exception at ang kanilang mga paraan ng paghawak.

3.1 NameError: Kapag gumamit ng hindi pa natukoy na variable

NameError ay nangyayari kapag tinukoy ang isang variable na hindi pa nadefine. Halimbawa, kapag ang variable ay hindi pa na-initialize.
try:
    print(a)
except NameError:
    print("Hindi naka-define ang variable")

3.2 TypeError: Kapag sinubukang mag-operate ng magkaibang uri

TypeError ay nangyayari kapag ang operasyon sa magkaibang data type ay hindi wasto. Halimbawa, kapag sinusubukang i-add ang isang numeric at string.
try:
    result = '10' + 5
except TypeError:
    print("Sinubukang mag-operate ng magkaibang uri")

3.3 ValueError: Kapag may maling halaga na ipinasa

ValueError ay nangyayari kapag may invalid na halaga na ipinasa. Halimbawa, kapag sinusubukang i-convert ang string sa integer.
try:
    number = int("abc")
except ValueError:
    print("May maling halaga na ipinasa")

4. Paraan ng paghawak ng maramihang mga exception

Sa Python, posible na mahuli ang maramihang mga exception sa loob ng isang try block. Maaari ring maproseso ang maramihang mga exception nang sabay sa isang except na pahayag.

4.1 Pagproseso ng maramihang mga exception nang hiwalay

Kung nais mong iproseso ang bawat exception nang hiwalay, gagamit ka ng maramihang except na mga block.
try:
    result = 10 / 0
except ZeroDivisionError:
    print("Hindi maaaring hatiin sa 0")
except NameError:
    print("Hindi pa naideklara ang variable")

4.2 Pagproseso ng maramihang mga exception nang sabay

Kung nais mong gawin ang parehong pagproseso para sa maramihang mga exception, maaari mong sabay-sabay na hulihin ang mga ito gamit ang isang except na pahayag.
try:
    result = 10 / '10'
except (ZeroDivisionError, TypeError):
    print("Nagkaroon ng hindi wastong operasyon")
Sa ganitong paraan, ang paggamit ng pare-parehong pagproseso para sa iba’t ibang mga exception ay nakakatulong upang mapanatiling maikli at malinaw ang code.
侍エンジニア塾

5. Mga user-defined na exception at paggamit ng raise na pahayag

Sa Python, maaari kang mag-define ng sarili mong mga exception para sa mga espesyal na sitwasyon na hindi nasasaklaw ng mga standard na exception. Ang ganitong mga custom na exception ay maaaring sadyang ipagana gamit ang raise na pahayag.

5.1 Pagpapagana ng custom na exception gamit ang raise na pahayag

Halimbawa, maaari mong i-define ang isang custom na exception na magtataas ng error kapag isang negatibong halaga ang naipasa, tulad ng sumusunod.
def check_value(value):
    if value < 0:
        raise ValueError("Hindi pinapayagan ang negatibong halaga")
    return value

try:
    check_value(-10)
except ValueError as e:
    print(e)
Sa pamamagitan ng paggamit ng raise na pahayag, maaari mong kontrolin ang paglabas ng error at magpakita ng angkop na mensahe ng error.

6. Buod at Mga Pinakamahusay na Kasanayan

Ang paghawak ng mga exception ay isang mahalagang tampok upang gawing mas matibay at ligtas ang mga programang Python. Narito ang mga pinakamahusay na kasanayan sa paghawak ng mga exception.
  • Mahuli ang partikular na mga exception: Kapag humuhuli ng mga exception, dapat mong tukuyin hangga’t maaari ang tiyak na uri ng error at iwasan ang labis na paggamit ng pangkalahatang Exception. Sa ganitong paraan, mas epektibong mapoproseso ang mga hindi inaasahang exception.
  • Maging masinsinan sa pamamahala ng mga mapagkukunan: Inirerekomenda na ang mga mapagkukunan tulad ng mga file at koneksyon sa network ay laging linisin gamit ang finally block.
  • Gawing malinaw ang mga mensahe ng error: Kapag nagpapakita ng mensahe ng error sa mga gumagamit, siguraduhing malinaw ang sanhi ng problema at magbigay ng gabay kung paano ito aayusin.
Sa pamamagitan ng tamang pag-implement ng paghawak ng mga exception, mapapabuti mo ang pagiging maaasahan ng programa at makakalikha ng code na kayang harapin ang mga error nang hindi nagdudulot ng abala sa mga gumagamit.