Python ile her exception verdiğinde geçip kodun zorla devam etmesini sağlamk mümkün mü?

Sadece Python ile (modülsüz), her exception verdiğinde geçip kodun zorla devam etmesini sağlamak mümkün mü?
(Yani try'a girsin, error çıkarsa excepte düşmesin tryda devam etsin.)

B
0 kişi takip ediyor.
Misafir olarak yayınla
7
7 CEVAP

Try'da hata verirse direk excepte düşüyor. Except'te bir şey yapma diyebilirsiniz sanırım. (Genel try catch bilgimle konuşuyorum belki pythonda farklıdır.)

B

İlk başta benim de düşündüğüm o idi fakat try ile deniyor excepte düştüğünde trydan devam etmesini istiyorum fakat sadece duruyor.

Batuhan Kızmaz 6 yıl

Bu söylediğiniz "if şartını sağlamıyorsa else'e düşmesin if'ten devam etsin" demeye benziyor. Try da excepte düşüren ne ise o sebebi atlatmanız gerekiyor.

Batuhan Ebil 6 yıl

Ben en iyisi durumu açıklıyayım, bir dictim var ve bir fonksiyonum var. Bu fonksiyon dictte bulunan bir elemana göre ihtiyaçları belirliyor ve eğer ihtiyaçlar karşılanmıyorsa False karşılanıyorsa True döndürüyor. Ben buraya -smtp- adlı elemanı gönderirsem 4 ihtiyacı bulunuyor (server, port, mail, pwd) şeklinde. Yazdığım modülde debug diye bir fonksiyon olduğu için ayrıca pythonun error döndürmesini istemiyorum fakat python o 4 elemandan birisi bile olmasa KeyError döndürüyor. Bunu çözmem gerekiyor.

Batuhan Kızmaz 6 yıl

com-7amv0euclff1vftqh6j0.jpg

Batuhan Kızmaz 6 yıl

Gelmeyen değişkenlere default değer atasanız? Null gibi mesela? En azından excepte düşmemiş olur. Bir de overloading fikri geliyor aklıma.

Batuhan Ebil 6 yıl

muhtemel hata çıkabilecek yerler için ayrı ayrı try except koy, yani içe içe birsuru try except blokları gibi

C

o zaman kod 300+ satır filan olur herlade

Batuhan Kızmaz 6 yıl

pass komutu olmaz mi ?

B

Pass komutu geçer, eğer pass dersem tryda hata aldığı an uygulama biter

Batuhan Kızmaz 6 yıl

Osman, hayır öyle birşey allahıma şükürler olsun ki yok. Burası python grubu. Bash'te bu var diye bu gün şirkette kanser olmak üzereydi iş arkadaşım Bedirhan. Lütfen bir kod patlıyorsa patlasın, sessizce geçip gitmesin, asla.

Ek olarak, try except yaptığında da pass etme, en azından logla, bir yere yazdır, printle ne yapıyorsan... Devran döner o exceptionların hürmetine horoz kesersin

U

Hocam ben kendi hata mesajımı kendim vermek istiyorum. Bunu Pythonun gereksiz keyErrorları ile değil de daha nazik debug modum ile verdirmek daha mantıklı geliyor

Batuhan Kızmaz 6 yıl

com-40xsayh1kfki122oytha.jpg

Batuhan Kızmaz 6 yıl

Soru: Contextlib'in suppres fonksiyonunu pure pythonda kullanmak. Bu kadar abartmaya gerek yoktu diye düşünüyorum Umarım attığınız kodu entegre edebilirim

Batuhan Kızmaz 6 yıl

şöyle anlatayım, sicis() içindeki kod ZeroDivisionError raise ediyor, ben onu tutup kendi hatam olan SicisError raise ediyorum, sicis() i çağırdığım yerde de SicisError içindeki mesajı print ettirip aynı hatayı tekrar raise ediyorum (opsiyonel)

Umut Çakıray 6 yıl

Ve osman lutfen ss degil pastebin kullan, ayrica verdigin ssden zar zor okuyabildigim kadariyla if elseif yapilarinda da ufak hatalar var

Ömer Özveren 6 yıl

o try exceptleri su sekilde denesene bir, name = self. Rdict['smtp_name'] if 'smtp_name' in self. Rdict. Keys() else None

Ö

Büyük ihtimalle o şekildede çalışır hatta gerekli olan parametreleri bir tuple'a atıp bunu kontrol ettirebilirim. Fikir için teşekkürler

Batuhan Kızmaz 6 yıl

Umut Çakıray sende 2. Checki yapabilir misin yaklasik 2 senedir 1 satir kod yazmadim hata olabilir ufak typo

Ö

self. Rdict. Get("smtp_name", None)

Umut Çakıray 6 yıl

Dogru o anda aklima neden gelmedi bilemedim, insan paslaniyor uzak kalinca

Ömer Özveren 6 yıl

Batuhan Kızmaz Umut Çakıray verdigi yontem cok daha anlasilir kod olacaktir o sekilde duzenlesen daha guzel gozukur

Ö