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: შესრულების დროს გაფრთხილება:
- ... (მეტი სხვა, სპეციფიკური მოდულებისთვის ან სიტუაციებისთვის)
- SystemExit: წარმოიქმნება პროგრამიდან გამოსვლის დროს, მაგალითად,
გამონაკლისების დაჭერისას, 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 დაიჭერდა ბაზის კლასით.