Python'da İstisnalar Nasıl İşlenir?

Python'da İstisnalar Nasıl İşlenir?

Özel durum işleme, programınızın çalışmayan kısımları için hata mesajlarını özelleştirme ve görüntüleme yeteneğinizdir.





İster bir web sitesi oluşturuyor, ister bir API, bir modül veya Python kullanarak başka bir ürün yapıyor olun, istisnaları etkili bir şekilde ele alma beceriniz, bir hatanın nedenini açıkça belirtmenize olanak tanır.





Burada, Python'da istisnaları nasıl ele alabileceğinize bir göz atacağız.





Python'da İstisna İşleme Nasıl Çalışır?

İstisnaları yükselttiğinizde, Python'a bir kod bloğu başarısız olduğunda bir mesaj getirmesini söylüyorsunuz. İstisna işleme, birine bir ağırlık kaldırmayı denemesini söylemek gibidir. Ve yapamazlarsa, size haber vermeleri gerekir.

Ancak Python'da bir istisna oluşturmak için Python'a belirli bir kod bloğunu denemesini ve çalıştırmasını söyleyeceksiniz. Bu blok başarısız olursa, Python'dan başarısız koda tanımlanmış bir istisna oluşturmasını isteyebilirsiniz.



Python Programlamada İstisnaları Ne Zaman Kullanmalısınız?

Çoğu durumda, istisnaları kullanarak standart Python hatalarını maskeleyebilirsiniz. Ancak bunu yapmak hata ayıklama sorunlarına neden olabileceğinden dikkatli olmanız gerekir. Sonuç olarak, olası bir hatanın temel nedenini bulmakta zorlanabilirsiniz.

Bu nedenle, kodunuzu yeterince test ettiğinizde ve çalıştığından emin olduğunuzda istisnaları kullanmalısınız. Sonuç olarak, kodun kendisinden ziyade kullanıcının sonundan kaynaklanabilecek olası hataları ele almak için bunları kullanmak en iyi uygulamadır.





Başka bir deyişle, istisnaları, programınızı nasıl kullanacakları konusunda kullanıcılara rehberlik etmek için bir uyarı aracı olarak kullanabilirsiniz.

Python İstisnalarını İşleme

Python'daki istisnaları işlemek için önce kodunuzu bir dene... hariç engellemek. Bazen, bir eklemeniz gerekebilir nihayet ihtiyaçlarınıza bağlı olarak daha fazla eylemi gerçekleştirmek için ifade.





Python istisnalarının kodlama konsepti genellikle şöyle görünür:

try:
'code to be executed'
except:
'error message'

Daha önce de belirtildiği gibi, ayrıca kullanabilirsiniz nihayet bir istisna bloğunda. Ama içine yazdığınız kod bir nihayet yan tümcesi bağımsızdır ve bir istisna olsa da olmasa da çalışır.

Özünde, içinde ne olduğuna bakılmaksızın sürekli olarak çalıştırmak istediğiniz başka bir kod bloğunuz varsa kullanışlı olur. dene... hariç engellemek.

İşte bir örnek:

try:
print(9+6)
except:
print('error message')
finally:
print('please restart')
Output:
15
please restart

Yukarıdaki kodda, Lütfen yeniden başla istisna olup olmadığına bakılmaksızın sürekli çalışır.

Bir Başka durumu da takip edebilir hariç Beyan:

try:
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: B needs to be defined

Şimdi bunu 'B' tanımlı olarak tekrar deneyin:

try:
B = 5
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: Added successfully! The result is 7

Yukarıdaki örnekler standartlaştırılmamış istisnalardır. Ancak yerleşik (tanımlanmış) istisnaları standartlaştırılmamış olanlarla birleştirdiğinizde daha açık bir istisnanız olabilir:

try:
C = 2 + B
except NameError as err:
print(err, ':', 'B needs to be defined, please')
else:
print(u'Added successfully! The result is %s'%(C))
Output: name 'B' is not defined : B needs to be defined, please

Yukarıdaki istisna, önce bir AdHatası içinde denemek engellemek. Daha sonra standardı yazdırır AdHatası önce istisna (' adı 'B' tanımlı değil'). Ve bunu yazılı istisnanızla destekler ('B'nin tanımlanması gerekiyor, lütfen').

İlgili: Her Programcının Bilmesi Gereken Temel Programlama İlkeleri

önyükleme dvd'si nasıl yapılır

Ve bir istisnalar zincirini idare etmek istiyorsanız, bir denemek birçok blokla hariç ifadeler. Bu oldukça kullanışlıdır, eğer denemek blok birçok istisnaya sahip olma potansiyeline sahiptir:

try:
B = 5
C = 2 + B
D = float(6)
F = 7/0
except NameError as err:
print(err,':', 'B needs to be defined, please')
except ValueError as val:
print(val,':', 'You can't convert that data')
except ZeroDivisionError as zeroerr:
print(zeroerr,':', 'You can't divide a number by zero')
else:
print(u'Operation successfull! The results are: %s, %s, and %s'%(C, D, F))
Output: division by zero : You can't divide a number by zero

Bölünme geçerliyse ne olur? Örneğin, değiştirme F = 7/0 ile yukarıdaki kodda F = 7/5 verir:

Output: Operation successfull! The results are: 7, 6.0, and 1.4

Python'da Kullanıcı Tanımlı İstisnalar

İstisnanızı da bulabilir ve daha sonra programınızda arayabilirsiniz. Bu, istisnanızın belirli bir açıklamasını vermenize ve istediğiniz gibi adlandırmanıza olanak tanır.

Bununla birlikte, her kullanıcı tanımlı istisna (doğrudan veya dolaylı olarak) hala yerleşik olarak gelir. İstisna Python sınıfı.

Aşağıdaki örnek kod, tabana atıfta bulunur İstisna doğrudan arayarak Çalışma hatası ondan:

class connectionError(RuntimeError):
def __init__(self, value):
self.value = value
try:
raise connectionError('Bad hostname')
except connectionError as err:
print(err.value)
Output: Bad hostname

Bunu not et bağlantı hatası , bu durumda, programınızda ihtiyacınız olduğunda yükseltebileceğiniz, kullanıcı tanımlı bir sınıftır.

İlgili: Python ile Normal İfadeler için Başlangıç ​​Kılavuzu

Kullanıcı tanımlı bir istisnayı doğrudan aşağıdakilerden türeterek yapabilirsiniz. İstisna temel sınıf. Ancak aşağıdaki istisna, 5'in 6'dan çıkarılmasını engeller ve istisnayı doğrudan temel sınıftan çağırır:

class errors(Exception):
pass
class sixFiveError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
try:
raise sixFiveError(6-5,'This substraction is not allowed')
except sixFiveError as e:
print('There was an error:', e.message)
Output: There was an error: This substraction is not allowed

Pratikte, daha önce tanımladığınız bir istisnayı başka bir fonksiyonda çağırarak kullanabilirsiniz. Örneğin, bir oluşturabilirsiniz floatError bu sadece iki şamandıranın eklenmesine izin verir:

# First call the base exception classes:
class errors(Exception):
pass
# Next, derive your own exception from the base class:
class FloatError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
# Create a function to add two floats:
def addTwoFloat(a, b):
if (type(a) and type(b)) != float:
raise FloatError(a+b,'Numbers must be float to add')
else:
print(a + b)
addTwoFloat(4, 7)
Output: __main__.FloatError: (11, 'Numbers must be float to add')

Çünkü şimdi bir tanımladınız FloatError sınıfını kullanarak iki kayan olmayan değişmezi eklemeye çalışırsanız Python onu yükseltir. addtwoFloat işlev.

yazdırabilirsiniz FloatError ne olduğunu görmek için onu oluşturduğunuz aynı Python dosyasındaki class:

print(FloatError)
Output:

FloatError ancak yerleşik bir Python istisnası değildir. Bunu arayarak doğrulayabilirsiniz FloatError bu sınıfı oluşturmadığınız başka bir yeni Python dosyasında:

print(FloatError)
Output: NameError: name 'FloatError' is not defined

bir AdHatası çünkü Python bunu standart bir istisna olarak tanımıyor.

Nasıl oynandığını görmek için diğer hata sınıflarını kendi kendine tanımlamayı deneyebilirsiniz.

Python Programlarınızı İstisnalarla Daha Kullanıcı Dostu Hale Getirin

Python'da birçok standart istisna vardır. Ama sizinkini de tanımlayabilirsiniz. Bununla birlikte, programınızı kullanma kolaylığı bir dereceye kadar çeşitli istisnaları (kullanıcı tanımlı, spesifik olmayan veya standart) nasıl ele aldığına bağlıdır.

Ancak istisnalar, kullanıcılar onlarla etkileşim kurduğunda programınızın nasıl çalışacağını belirlemenize izin verir. Bir hatanın nedenini açık ve net bir şekilde belirtmek, kullanıcılara neyi yanlış yaptıkları konusunda bir fikir verir ve bazen onları doğru yöne yönlendirir.

Paylaş Paylaş Cıvıldamak E-posta Python Kodunuzda Hata Ayıklama

Yolunuzdaki her Python hatasını ezmek için kendinizi teknik bilgiyle donatın.

Sonrakini Oku
İlgili konular
  • Programlama
  • piton
  • Kodlama Eğitimleri
Yazar hakkında Idisou Omisola(94 Makale Yayımlandı)

Idowu akıllı teknoloji ve üretkenlik konusunda tutkulu. Boş zamanlarında kodlamayla uğraşıyor ve canı sıkıldığında satranç tahtasına geçiyor ama arada sırada rutinden kopmayı da seviyor. İnsanlara modern teknolojinin yolunu gösterme tutkusu onu daha fazla yazmaya motive ediyor.

Idowu Omisola'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın