5. උසස් මාතෘකා (Advanced Topics)

පාඩම 5.3: දෝෂ කළමනාකරණය (try...except)

වැඩසටහනක් ක්‍රියාත්මක වන විට, බලාපොරොත්තු නොවූ දෝෂ (errors) ඇතිවිය හැක. සාමාන්‍යයෙන්, මෙවැනි දෝෂයක් (Exception) ඇතිවූ විට, වැඩසටහන එතැනින්ම නතර වී බිඳ වැටේ (crash). **Exception Handling** යනු මෙවැනි දෝෂ "හසුකරගෙන" (catch), වැඩසටහන බිඳ නොවැටී ඉදිරියට ගෙන යාමට යොදාගන්නා ක්‍රමවේදයයි.

try...except බ්ලොක් එක

මේ සඳහා අපි **try** සහ **except** යන මූල පද භාවිතා කරමු.

  • try block: දෝෂයක් ඇතිවිය හැකි යැයි ඔබ සිතන කේතය මෙම කොටස තුළ ලියන්න.
  • except block: try කොටස තුළ දෝෂයක් ඇති වුවහොත්, වැඩසටහන නතර නොවී, කෙලින්ම මෙම කොටසට පැමිණ මෙහි ඇති කේතය ක්‍රියාත්මක කරයි.

ව්‍යුහය (Syntax):

try:
    # දෝෂයක් ඇතිවිය හැකි කේතය
except:
    # දෝෂයක් ඇති වුවහොත් ක්‍රියාත්මක වන කේතය

උදාහරණය:

try:
    numerator = 10
    denominator = int(input("Enter a number to divide 10 by: ")) # පරිශීලකයා 0 හෝ අකුරු ඇතුළත් කළ හැක
    result = numerator / denominator
    print(f"The result is {result}")
except:
    print("Oops! Something went wrong. Please check your input.")
print("--- Program continues after the try-except block ---")

නිශ්චිත දෝෂ හසුකර ගැනීම (Handling Specific Exceptions)

සියලුම දෝෂ එකම `except` එකකින් හසුකර ගන්නවාට වඩා, එක් එක් දෝෂ වර්ගයට වෙන වෙනම ප්‍රතිචාර දැක්වීම වඩාත් හොඳ ක්‍රමයකි.

උදාහරණය:

try:
    age = int(input("Please enter your age: "))
    if age < 0:
        raise ValueError("Age cannot be negative.") # අපිටම දෝෂයක් මතු කළ හැක
    print(f"You will be {age + 1} next year.")
except ValueError as e: # int() එකට අකුරු දුන්නොත් හෝ අප මතුකල දෝෂය ඇතිවුවහොත් මෙය ක්‍රියාත්මක වේ
    print(f"Invalid input: {e}. Please enter a valid number for age.")
except Exception as e: # බලාපොරොත්තු නොවූ වෙනත් ඕනෑම දෝෂයක් සඳහා
    print(f"An unexpected error occurred: {e}")

finally බ්ලොක් එක

try...except ව්‍යුහයට **finally** නමින් තවත් කොටසක් එක් කළ හැක. finally කොටසේ ඇති කේතය දෝෂයක් ඇති වුවත්, නැතත්, සෑම විටම අවසානයේ ක්‍රියාත්මක වේ.

try:
    print("Step 1: Code inside try block.")
    # result = 10 / 0 # දෝෂයක් ඇතිවන අවස්ථාව
except ZeroDivisionError:
    print("Step 2: Caught a ZeroDivisionError.")
finally:
    print("Step 3: This 'finally' block runs no matter what.")

දෝෂ කළමනාකරණය මඟින් ඔබේ වැඩසටහන් වඩාත් ශක්තිමත් සහ විශ්වාසදායක වේ.