Sobes.tech
Junior
198

გთხოვთ, ისაუბროთ Python-ის გამონაკლისების იერარქიაზე.

პასუხი AI-სგან

sobes.tech AI

Python-ში გამონაკლისები ორგანიზებულია ჰიერქრახიული ხის სახით, რომლის მწვერვალი არის კლასი BaseException:

ძირითადი ფილიალები და კლასები:

  • BaseException: ყველა გამონაკლისის საწყისი კლასი. არ არის განკუთვნილი პირდაპირი დაჭერისთვის უმეტეს შემთხვევაში:
    • SystemExit: წარმოიქმნება პროგრამიდან გამოსვლის დროს, მაგალითად, sys.exit()-ის გამოძახებით:
    • KeyboardInterrupt: წარმოიქმნება, როდესაც მომხმარებელმა შეწყვიტა პროგრამის შესრულება (საშუალოდ Ctrl+C):
    • GeneratorExit: წარმოიქმნება გენერატორის დახურვისას:
    • Exception: უმეტესად დამუშავებადი გამონაკლისების საწყისი კლასი. ჩვეულებრივ, მას იჭერენ except ბლოკებში:
      • StopIteration: იწარმოება იტერატორით, რათა ნიშნავდეს ელემენტების დასრულებას:
      • ArithmeticError: მათემატიკური შეცდომების საწყისი კლასი:
        • FloatingPointError: ხშირმა შეცდომებმა ხარვეზიანი წერტილოვანი რიცხვების ოპერაციებში:
        • OverflowError: მათემატიკური ოპერაციის შედეგი ძალიან დიდია:
        • ZeroDivisionError: გაყოფა ზოლზე:
      • AssertionError: როდესაც assert ვერ გადის:
      • AttributeError: როდესაც ცდილობთ მიუწვდეთ არარსებულ თვისებას:
      • EOFError: როდესაც ფაილის ბოლოს მიაღწიეთ მონაცემების წაკითხვის გარეშე:
      • ImportError: როდესაც მოდულის ან სახელის იმპორტი ვერ ხერხდება:
        • ModuleNotFoundError: მოდული ვერ მოიძებნა:
      • LookupError: საწყისი კლასი ძებნის შეცდომებისთვის:
        • IndexError: არავალიდური ინდექსი სერიალში:
        • KeyError: არავალიდური გასაღები დიქშინარიში:
      • NameError: უცნობი ცვლადის ან სახელის გამოყენება:
        • UnboundLocalError: ცდილობთ გამოიყენოთ ადგილობრივი ცვლადი, რომელიც ჯერ არ არის განსაზღვრული:
      • OSError: ოპერაციული სისტემის შეცდომები:
        • FileNotFoundError: ფაილი ან დირექტორია არ მოიძებნა:
        • IsADirectoryError: ფაილი ელოდებოდა, მაგრამ დირექტორია მოიძებნა:
        • NotADirectoryError: დირექტორია ელოდებოდა, მაგრამ ფაილი მოიძებნა:
        • PermissionError: დაშვების შეცდომა (მაგ., წაკითხვის/წერილის უფლების გარეშე):
        • ProcessLookupError: პროცესის PID არ არსებობს:
        • TimeoutError: ოპერაცია გადააჭარბა განსაზღვრულ დროს:
      • RuntimeError: სხვა შეცდომები, რომლებიც არ შედიან ზემოთ მოცემულ კატეგორიებში:
        • RecursionError: რეკურსიის მაქსიმალური სიღრმის გადაჭარბება:
      • SyntaxError: კოდის სინტაქსის შეცდომა:
        • IndentationError: არასწორი ინდენტაცია:
      • SystemError: Python ინტერპრეტატორის შიდა შეცდომა:
      • TypeError: ოპერაცია გამოიყენება არასწორ ტიპის ობიექტზე:
      • ValueError: ოპერაცია იღებს სწორი ტიპის არგუმენტს, მაგრამ არასწორ მნიშვნელობას:
      • RuntimeWarning: შესრულების დროს გაფრთხილება:
      • ... (მეტი სხვა, სპეციფიკური მოდულებისთვის ან სიტუაციებისთვის)

გამონაკლისების დაჭერისას, except ბლოკები მუშაობს ზევიდან ქვემოთ. მნიშვნელოვანია, უფრო სპეციფიკური გამონაკლისების დაჭერა უფრო ზოგადი კლასების წინ, რათა თავიდან აიცილოთ მათი შეჭმა:

მაგალითი:

# უფრო სპეციფიკური გამონაკლისის დაჭერა უფრო ზოგადზე წინ
try:
    # კოდი, რომელიც შეიძლება გამოიწვიოს გამონაკლისი
    d = {"a": 1}
    print(d["b"])
except KeyError:
    # გასაღების არარსებობის დამუშავება
    print("შეცდომა: გასაღები არ მოიძებნა")
except LookupError:
    # საერთო ძებნის შეცდომების დამუშავება (შესაბამისია KeyError და IndexError)
    print("შეცდომა: ძებნის პრობლემა")
except Exception as e:
    # სხვა ყველა გამონაკლისის დამუშავება
    print(f"სხვა შეცდომა მოხდა: {e}")

თუ except LookupError დადგებოდა წინ except KeyError-ის, მაშინ KeyError დაიჭერდა ბაზის კლასით.