Python Try Except

பைத்தான் விதிவிலக்கு கையாளுதல் கற்றுக்கொள்ளுங்கள்

Python - Try Except

try தொகுதி

செயல்பாடு: பிழைகளுக்கான குறியீட்டுத் தொகுதியைச் சோதிக்கிறது

கட்டமைப்பு: try:

except தொகுதி

செயல்பாடு: பிழையைக் கையாளுகிறது

கட்டமைப்பு: except:

else தொகுதி

செயல்பாடு: பிழை இல்லாதபோது குறியீட்டை செயல்படுத்துகிறது

கட்டமைப்பு: else:

finally தொகுதி

செயல்பாடு: முடிவைப் பொருட்படுத்தாமல் குறியீட்டை செயல்படுத்துகிறது

கட்டமைப்பு: finally:

விதிவிலக்கு கையாளுதல்

ஒரு பிழை ஏற்படும் போது, அல்லது விதிவிலக்கு என்று நாம் அழைக்கும் போது, Python பொதுவாக நிறுத்தி ஒரு பிழை செய்தியை உருவாக்கும்.

இந்த விதிவிலக்குகள் try கூற்றைப் பயன்படுத்தி கையாளப்படலாம்:

🏁 உதவிக்குறிப்பு:

try தொகுதி ஒரு பிழையை உயர்த்துவதால், except தொகுதி செயல்படுத்தப்படும்.

விதிவிலக்கு கையாளுதல் இல்லாமல்

# இந்த கூற்று ஒரு பிழையை உயர்த்தும்
print(x)  # x வரையறுக்கப்படவில்லை

# நிரல் செயல்படுவது நிறுத்தப்படும்
print("This line won't execute")

முடிவு: NameError, நிரல் செயலிழக்கும்

பயனர் அனுபவம்: மோசமானது

விதிவிலக்கு கையாளுதலுடன்

try:
    print(x)  # x வரையறுக்கப்படவில்லை
except:
    print("An exception occurred")

print("Program continues normally")

முடிவு: "An exception occurred", நிரல் தொடர்கிறது

பயனர் அனுபவம்: நல்லது

அடிப்படை Try Except

எடுத்துக்காட்டு

try தொகுதி ஒரு விதிவிலக்கை உருவாக்கும், ஏனெனில் x வரையறுக்கப்படவில்லை:

try:
    print(x)  # x வரையறுக்கப்படவில்லை
except:
    print("An exception occurred")

# நிரல் தொடர்கிறது
print("Program execution continues...")

இயக்க ஓட்டம்:

படி 1: try தொகுதி தொடங்குகிறது

படி 2: print(x) செயல்படுத்தப்படுகிறது → NameError

படி 3: except தொகுதிக்கு கட்டுப்பாடு மாற்றப்படுகிறது

படி 4: print("An exception occurred") செயல்படுத்தப்படுகிறது

படி 5: try-except தொகுதிக்கு பிறகு நிரல் தொடர்கிறது

வெளியீடு:
An exception occurred
Program execution continues...

பல விதிவிலக்குகள்

ஒரு சிறப்பு வகை பிழைக்கு ஒரு சிறப்பு குறியீட்டுத் தொகுதியை செயல்படுத்த விரும்பினால், நீங்கள் விரும்பும் அளவுக்கு பல விதிவிலக்குத் தொகுதிகளை வரையறுக்கலாம்:

எடுத்துக்காட்டு

try தொகுதி ஒரு NameError ஐ உயர்த்தினால் ஒரு செய்தியையும், மற்ற பிழைகளுக்கு மற்றொன்றையும் அச்சிடுக:

try:
    print(x)  # x வரையறுக்கப்படவில்லை
except NameError:
    print("Variable x is not defined")
except:
    print("Something else went wrong")

🔍 குறிப்பு:

எங்கள் Python உள்ளமைக்கப்பட்ட விதிவிலக்குகள் குறிப்பில் மேலும் பிழை வகைகளைப் பார்க்கவும்.

குறிப்பிட்ட பிழை வகைகள்

try:
    result = 10 / 0
except ZeroDivisionError:
    print("Cannot divide by zero!")
except TypeError:
    print("Type error occurred!")
except Exception as e:
    print(f"Other error: {e}")

பொதுவான Python பிழைகள்

  • NameError - மாறி வரையறுக்கப்படவில்லை
  • TypeError - தவறான தரவு வகை
  • ValueError - தவறான மதிப்பு
  • ZeroDivisionError - பூஜ்ஜியத்தால் வகுத்தல்
  • IndexError - அடைவெண் வரம்பிற்கு வெளியே
  • KeyError - சொற்களஞ்சிய விசை இல்லை
  • FileNotFoundError - கோப்பு கிடைக்கவில்லை

else தொகுதி

எந்த பிழையும் உயர்த்தப்படாவிட்டால் செயல்படுத்தப்பட வேண்டிய குறியீட்டுத் தொகுதியை வரையறுக்க else முக்கியச்சொல்லைப் பயன்படுத்தலாம்:

எடுத்துக்காட்டு

இந்த எடுத்துக்காட்டில், try தொகுதி எந்த பிழையையும் உருவாக்காது:

try:
    print("Hello, World!")
except:
    print("Something went wrong")
else:
    print("Nothing went wrong - else block executed")

else தொகுதியின் நோக்கம்:

நிபந்தனை: எந்த except தொகுதியும் செயல்படுத்தப்படாவிட்டால் மட்டுமே

பயன்பாடு: வெற்றிகரமான செயல்பாட்டிற்கான குறியீடு

நன்மை: try தொகுதியிலிருந்து வெற்றிகரமான குறியீட்டைப் பிரிக்கிறது

எடுத்துக்காட்டு: கோப்பு வெற்றிகரமாகப் படிக்கப்பட்ட பிறகு செயலாக்கம்

finally தொகுதி

finally தொகுதி, குறிப்பிடப்பட்டால், try தொகுதி பிழையை உயர்த்துகிறதா இல்லையா என்பதைப் பொருட்படுத்தாமல் செயல்படுத்தப்படும்.

எடுத்துக்காட்டு

try:
    print(x)  # x வரையறுக்கப்படவில்லை
except:
    print("Something went wrong")
finally:
    print("The 'try except' is finished")

வெற்றிகரமான இயக்கம்

try:
    print("Hello, World!")
except:
    print("Something went wrong")
finally:
    print("This always executes")

# Output:
# Hello, World!
# This always executes

பிழையுடன் இயக்கம்

try:
    print(undefined_variable)
except NameError:
    print("Variable not found")
finally:
    print("This always executes")

# Output:
# Variable not found
# This always executes

கோப்பு கையாளுதலுடன் நடைமுறை எடுத்துக்காட்டு

இது பொருள்களை மூடவும் வளங்களை சுத்தம் செய்யவும் பயனுள்ளதாக இருக்கும்:

எடுத்துக்காட்டு

எழுத முடியாத ஒரு கோப்பைத் திறக்கவும் எழுதவும் முயற்சிக்கவும்:

try:
    f = open("demofile.txt", "r")
    try:
        content = f.read()
        print("File read successfully")
    except:
        print("Something went wrong when reading the file")
    finally:
        f.close()
        print("File closed successfully")
except FileNotFoundError:
    print("File not found")
except PermissionError:
    print("Permission denied")
except Exception as e:
    print(f"An error occurred: {e}")

🔒 முக்கிய நன்மை:

கோப்புப் பொருளைத் திறந்து விடாமல், நிரல் தொடரும். finally தொகுதி கோப்பை எப்போதும் மூடுகிறது என்பதை உறுதி செய்கிறது.

ஒரு விதிவிலக்கை உயர்த்துதல்

ஒரு Python உருவாக்குநராக, ஒரு நிபந்தனை ஏற்பட்டால் விதிவிலக்கை எறிய நீங்கள் தேர்வு செய்யலாம்.

🚨 உதவிக்குறிப்பு:

ஒரு விதிவிலக்கை எறிய (அல்லது உயர்த்த), raise முக்கியச்சொல்லைப் பயன்படுத்தவும்.

எடுத்துக்காட்டு 1: பொதுவான விதிவிலக்கு

x = -1

if x < 0:
    raise Exception("Sorry, no numbers below zero")

# நிரல் இங்கே நிறுத்தப்படும்
print("This won't be printed")

எடுத்துக்காட்டு 2: குறிப்பிட்ட பிழை வகை

x = "hello"

if not isinstance(x, int):
    raise TypeError("Only integers are allowed")

# அல்லது
if type(x) is not int:
    raise TypeError("Only integers are allowed")

பயனர் வரையறுக்கப்பட்ட விதிவிலக்குகள்

class InvalidAgeError(Exception):
    """வயது செல்லுபடியாகாதது போது எறியப்படும்"""
    pass

def check_age(age):
    if age < 0:
        raise InvalidAgeError("Age cannot be negative")
    if age > 150:
        raise InvalidAgeError("Age seems unrealistic")
    return True

# பயன்பாடு
try:
    check_age(-5)
except InvalidAgeError as e:
    print(f"Invalid age: {e}")

முழுமையான Try-Except-Else-Finally கட்டமைப்பு

def divide_numbers(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        print("Error: Cannot divide by zero!")
        return None
    except TypeError:
        print("Error: Both arguments must be numbers!")
        return None
    except Exception as e:
        print(f"Unexpected error: {e}")
        return None
    else:
        print(f"Division successful: {a} / {b} = {result}")
        return result
    finally:
        print("Division operation completed (always executes)")

# சோதனை எடுத்துக்காட்டுகள்
print("Test 1:", divide_numbers(10, 2))
print("\nTest 2:", divide_numbers(10, 0))
print("\nTest 3:", divide_numbers(10, "two"))

கட்டமைப்பு ஓட்ட வரைபடம்:

     Start
       |
       v
   try block
       |
       /\
Success /  \ Error
     /      \
    v        v
 else      except
 block     block
    |        |
    v        v
 finally  finally
 block    block
    |        |
    v        v
   End

பயிற்சி

ஒரு try...except தொகுதியில், try தொகுதி பிழையை உயர்த்துகிறதா இல்லையா என்பதைப் பொருட்படுத்தாமல் செயல்படுத்தப்படும் ஒரு குறிப்பிட்ட தொகுதி உள்ளது. இந்த தொகுதியின் பெயர் என்ன?

பயிற்சி கேள்வி:

finally
✓ சரி! finally தொகுதி எப்போதும் செயல்படுத்தப்படும், try தொகுதி வெற்றிகரமாக முடிந்தாலும் அல்லது விதிவிலக்கு ஏற்பட்டாலும். இது வளங்களை சுத்தம் செய்ய பயன்படுகிறது.
last
✗ தவறு! Python இல் last தொகுதி இல்லை. finally தொகுதி எப்போதும் கடைசியாக செயல்படுத்தப்படும், ஆனால் அதன் பெயர் finally ஆகும்.
always
✗ தவறு! Python இல் always தொகுதி இல்லை. finally தொகுதி எப்போதும் செயல்படுத்தப்படுகிறது, ஆனால் அதன் பெயர் finally ஆகும்.

சிறந்த நடைமுறைகள்

குறிப்பிட்ட விதிவிலக்குகளைப் பிடிக்கவும்: பொதுவான except: ஐத் தவிர்க்கவும், குறிப்பிட்ட பிழை வகைகளைப் பிடிக்கவும்
வளங்களை சுத்தம் செய்ய finally பயன்படுத்தவும்: கோப்புகள், இணைப்புகள் மற்றும் தரவுத்தள இணைப்புகளை மூடுதல்
பிழை செய்திகளை வழங்கவும்: பயனர்கள் என்ன தவறு நடந்தது என்பதைப் புரிந்துகொள்ள உதவும் தகவல்களை வழங்கவும்
மிக அதிகமான குறியீட்டை try தொகுதியில் வைக்க வேண்டாம்: சாத்தியமுள்ள பிழை ஏற்படும் குறியீட்டை மட்டும் சுற்றி வைக்கவும்
வெற்றிகரமான இயக்கத்திற்கு else பயன்படுத்தவும்: விதிவிலக்கு கையாளுதலிலிருந்து சாதாரண ஓட்டத்தைப் பிரிக்கவும்
பிழை செய்திகளைப் பதிவு செய்யவும்: சிக்கலைக் கண்டறியவும் சரிசெய்யவும் பிழை விவரங்களைப் பதிவு செய்யவும்