SORU
23 AĞUSTOS 2009, Pazar


Modern Python özel istisnalar bildirmek için doğru yolu?

Modern Python özel istisna sınıfları için doğru yolu nedir? Birincil amacım diğer istisna sınıfları ne olursa olsun takip etmek, o (örneğin) dışında ben de dahil herhangi bir ekstra dize durum yakalandı ne olursa olsun yazdırılır.

"Ben Python 2.5 çalışacak bir şey demek ama 'doğru' Python 2.6 ve 3.* Python için "modern Python tarafından şeyler yapmanın bir yolu. Ve "hatanın nedeni hakkında ek veri içeren bir özel Durum nesnesi yani: bir dize, belki de başka bir rasgele nesne durum. ilgili özel tarafından

Python 2.6.2 aşağıdaki uyarı admin tarafından takıldı.

>>> class MyError(Exception):
...     def __init__(self, message):
...         self.message = message
... 
>>> MyError("foo")
_sandbox.py:3: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6

BaseException nitelikler message adlı özel bir anlamı vardır ki deli gibi görünüyor. Öznitelik uzakta iptal etme için çalışıyorlar 2.5 özel bir anlamı var mıydı, adı (ve yalnız) şimdi yasak sanırım bu PEP-352 toplamak? Ugh.

Fuzzily Exception sihirli bir parametre olduğunu biliyor args, ama bunu kullanmak için nasıl bildim de geldim. Ne de ben doğru şeyler yapmak için ileriye dönük olduğundan emin değilim; ben online bulundu tartışmalardan uzak Python 3 argüman ile yapmaya çalıştıklarını ileri sürdü.

Güncelleme: geçersiz kılma önerilen iki cevap __init__ ve __str__/__unicode__/__repr__. Bunu yazarak bir sürü gibi görünüyor, bu gerekli mi?

CEVAP
23 AĞUSTOS 2009, Pazar


Belki de asıl soru, ama neden olmasın özledim:

class MyException(Exception):
    pass

Düzenleme:bir şey (veya fazla argüman geçmek) geçersiz kılmak için, bunu yapmak için:

class ValidationError(Exception):
    def __init__(self, message, errors):

        # Call the base class constructor with the parameters it needs
        super(ValidationError, self).__init__(message)

        # Now for your custom code...
        self.errors = errors

Bu şekilde ikinci param hata iletileri dict pas ve e.errors ile daha sonra alabilirsin

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Khoury

    Adam Khoury

    23 Ocak 2008
  • Ben Vivona

    Ben Vivona

    24 Ocak 2010
  • Smith Micro Graphics

    Smith Micro

    15 Mayıs 2008