Python'daki farklı istisna türleriyle çalışırken, kod çoğaltmasını önlemek için iyi bir örnek nedir? Ben ve httpError simlar ama oldukça UrlError tedavi etmek istiyorum:Python: Özel durum yakalamada kod çoğaltmanın nasıl önlenir?
try:
page = urlopen(request)
except URLError, err:
logger.error("An error ocurred %s", err)
except HTTPError, err:
logger.error("An error occured %s", err)
logger.error("Error message: %s", err.read())
Bu örnekte, ilk logger.error çağrısı tekrarını önlemek istiyorum. Verilen UrlError httpError ebeveyni biri böyle bir şey yapabileceğini geçerli:
except URLError, err:
logger.error("An error occurred %s", err)
try:
raise err
except HTTPError, err:
# specialization for http errors
logger.error("Error message: %s", err.read())
except:
pass
başka bir yaklaşım isinstance örn kullanmak olacaktır. UrlError ve httpError miras zinciri içinde olmaz ise: Biri ben tercih etmeliyiz
except (URLError, HTTPError), err:
logger.error("An error occured %s", err)
if isinstance(err, HTTPError):
logger.error("Error message: %s", err.read())
, başka daha iyi bir yaklaşım var mı?
Teşekkürler Tim! Bu inandırıcı. İlk örnekte URLError, HTTPError siparişini tespit ettiniz. Sorunu, örneğinizde sorunun cevabında belirttiğiniz gibi açıkça belirttiği gibi düzenlemiyorum. – Bernhard