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.)
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.)
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.
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.
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
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
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
şö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)
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.)
İ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.
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.
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.
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.
muhtemel hata çıkabilecek yerler için ayrı ayrı try except koy, yani içe içe birsuru try except blokları gibi
o zaman kod 300+ satır filan olur herlade
pass komutu olmaz mi ?
Pass komutu geçer, eğer pass dersem tryda hata aldığı an uygulama biter
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
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
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
şö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)
Ve osman lutfen ss degil pastebin kullan, ayrica verdigin ssden zar zor okuyabildigim kadariyla if elseif yapilarinda da ufak hatalar var
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
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)
Dogru o anda aklima neden gelmedi bilemedim, insan paslaniyor uzak kalinca
Batuhan Kızmaz Umut Çakıray verdigi yontem cok daha anlasilir kod olacaktir o sekilde duzenlesen daha guzel gozukur