2.1 İstisna Yaratmaq
Məsələni həll edə bilmirsənsə — ona rəhbərlik et. Əgər proqramda baş verən xətalardan qaça bilməyəcəyiksə, onları idarə etməyi öyrənməliyik. Bu məqsədlə gəlin şüurlu şəkildə istisnalar yaratmağı öyrənək.
Ən sadə istisna nümunəsi — nul ilə bölmə. Proqram da olduqca sadədir:
x = 100 / 0
Belə kod xətayla işləyəcək:
Traceback (most recent call last):
File "", line 1, in
x = 100 / 0
~~~^~
ZeroDivisionError: division by zero
ZeroDivisionError
— bu istisnanın adı, division by zero
isə onun qısa təsviridir. Həmçinin Python, bu istisnanın baş verdiyi sətrin nömrəsini bildirməkdədir.
Məlumat tiplərinin uyğunsuzluğu
Təbii ki, başqa istisnalar da mümkündür. Məsələn, bir sətir ilə ədədi toplamağa cəhd edərkən:
s = "100" + 100
TypeError
istisnası baş verəcək:
Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for +: 'str' and 'int'
Siyahının sərhədlərini aşmaq
Daha bir çox yayılmış xəta, istisna yaradan səbəb, siyahıda olmayan elementə müraciət etmə cəhdidir:
my_list = [1, 2, 3]
print(my_list[10])
IndexError
istisnası baş verəcək:
Traceback (most recent call last):
print(my_list[10])
~~~~~~~^^^^
IndexError: list index out of range
Onlardan neçə dənə var? Minlərlə fərqli istisna növü var. Üstəlik, hər hansı xüsusi vəziyyəti təsvir etmək üçün mövcud olanlardan kifayət etmirsə, siz öz istisnalarınızı yarada bilərsiniz. Amma çox populyar olanlar o qədər də çox deyil.
2.2 Ən məşhur istisnaların siyahısı
İstisnalar çoxdur, amma yeni başlayan biri kimi sənə ən məşhurları ilə tanış olmaq faydalı olar. Aşağıda onların cədvəlini təqdim edirəm:
İstisna | Təsvir |
---|---|
Exception |
Bütün istisnalar üçün əsas sinif. |
IndexError |
Silsilədə (məsələn, siyahı və ya tupl) mövcud olmayan indeksə müraciət zamanı yaranır. |
KeyError |
Sözlükdə mövcud olmayan açara müraciət zamanı yaranır. |
NameError |
Mövcud olmayan dəyişənə müraciət zamanı yaranır. |
RuntimeError |
İcra zamanı digər növ istisnalara aid olmayan ümumi səhv zamanı yaranır. |
StopIteration |
Iterasiyanın sonunu bildirmək üçün yaranır. |
SyntaxError |
Kodda sintaksis səhvi zamanı yaranır. |
IndentationError |
Kodda indentasiya səhvi zamanı yaranır (SyntaxError alt tipi). |
TabError |
İndentasiya üçün tabulyasiya və boşluqların qarışdırılması zamanı yaranır (IndentationError alt tipi). |
TypeError |
Uyğunsuz məlumat tipləri ilə əməliyyat etməyə çalışdıqda yaranır. |
UnboundLocalError |
Lokal dəyişənə elan edilməmişdən əvvəl müraciət zamanı yaranır (NameError alt tipi). |
ValueError |
Funksiyaya və ya əməliyyata düzgün olmayan dəyərə malik arqument verildikdə yaranır. |
ZeroDivisionError |
Sıfıra bölmə zamanı yaranır. |
Çox güman ki, yeni başlayan biri kimi, öyrənmənin ilk ayında bu səhvlərin hamısı ilə rastlaşacaqsan. Bu normaldır — səhvlərdən öyrənilir.
2.3 Kodda səhvlər
Gəlin kodda səhvlərin baş verdiyi bir neçə vəziyyəti daha nəzərdən keçirək, ki, siz onları öz kodunuzda daha asan tapa biləsiniz:
IndentationError
Bu tip səhv kodda boşluqlar düzgün qurulmadığı zaman yaranır. Məsələn, tabulyasiya və boşluqların qarışdırılması və ya düzgün olmayan boşluqların sayı.
def example():
print("Salam")
print("Dünya") # Səhv boşluq IndentationError səhvinə səbəb olur
example()
NameError
def example():
print(undeclared_variable) # Elan edilməmiş dəyişəni istifadə etmək NameError-a səbəb olur
example()
ValueError
Bu tip səhv, əməliyyat və ya funksiya düzgün tipdə arqument alıb, amma yanış dəyər verdiyi zaman yaranır.
def example():
int("abc") # Rəqəm olmayan bir sətiri çevirməyə çalışmaq ValueError-a səbəb olur
example()
KeyError
Bu tip səhv proqramın sözlükdə mövcud olmayan bir açara daxil olmağa çalışdığı zaman yaranır.
def example():
my_dict = {"a": 1, "b": 2}
print(my_dict["c"]) # Mövcud olmayan açara daxil olmaq KeyError-a səbəb olur
example()
SyntaxError
Bu tip səhv kodda sintaksis səhvi olduğu zaman yaranır, yəni kod Python dilinin qrammatikasına uyğun gəlmir.
def example():
eval("if True print('Salam')") # Düzgün olmayan sintaksis SyntaxError-a səbəb olur
example()
Kim xəbərdar edilibsə, o hazırdır. İndi siz səhvə səbəb olan vəziyyətləri tanıya və yarada bilirsiniz. İndi isə bu səhvləri necə həll edəcəyimizi öyrənmək vaxtıdır.
GO TO FULL VERSION