Python: Ausnahme im separaten Modul funktioniert falsch

Ich habe neue Exception-Klasse erstellt und ich gib es gerne Darstellung von Fehlern wie in OSError-Klasse. Hier ist was ich will

>>> raise(MyError(1, 'info')) MyError: [Errno 1] predefined text: info 

Was soll ich machen? Kann ich das tun, wenn ich von der Basis-Ausnahmeklasse erben werde? Hier habe ich versucht (Beispiel aus Modul für die Arbeit mit Gnulib):

 class GNULibError(Exception): '''Exception handler for GNULib classes.''' def __init__(self, errno, errinfo=None): '''Each error has following parameters: errno: code of error; used to catch error type 1: destination directory does not exist: <destdir> 2: configure file does not exist: <configure.ac> 3: selected module does not exist: <module> 4: <cache> is expected to contain gl_M4_BASE([m4base]) 5: missing sourcebase argument 6: missing docbase argument 7: missing testsbase argument 8: missing libname argument errinfo: additional info''' self.errno = errno; self.errinfo = errinfo self.args = (self.errno, self.errinfo) def __str__(self): errors = \ [ # Begin list of errors "destination directory does not exist: %s" % self.errinfo, "configure file does not exist: %s" % self.errinfo, "selected module does not exist: %s" % self.errinfo, "%s is expected to contain gl_M4_BASE([%s])" % \ (os.path.join(self.errinfo, 'gnulib-comp.m4'), self.errinfo), "missing sourcebase argument; cache file doesn't contain it," +" so you might have to set this argument", "missing docbase argument; you might have to create GNULibImport" \ +" instance with mode 0 and docbase argument", "missing testsbase argument; cache file doesn't contain it," +" so you might have to set this argument" "missing libname argument; cache file doesn't contain it," +" so you might have to set this argument", "dependencies and testflag 'default' cannot be used together", ] # Complete list of errors if not PYTHON3: self.message = (b'[Errno %d] %s' % \ (self.errno, errors[self.errno -1].encode(ENCS['default']))) else: # if PYTHON3 self.message = ('[Errno %d] %s' % \ (self.errno, errors[self.errno -1])) return(self.message) 

Es funktioniert falsch und gibt nur Fehlernamen für Python 2 und leere Zeichenfolge für Python 3. Wie bekomme ich ein solches Verhalten wie ich will? Vielen Dank!

One Solution collect form web for “Python: Ausnahme im separaten Modul funktioniert falsch”

Sie sollten __repr__ Methode anstelle von __str__ implementieren

http://docs.python.org/reference/datamodel.html#object.__repr__

Das wird funktionieren:

  class GNULibError(Exception): '''Exception handler for GNULib classes.''' def __init__(self, errno, errinfo=None): '''Each error has following parameters: errno: code of error; used to catch error type 1: destination directory does not exist: <destdir> 2: configure file does not exist: <configure.ac> 3: selected module does not exist: <module> 4: <cache> is expected to contain gl_M4_BASE([m4base]) 5: missing sourcebase argument 6: missing docbase argument 7: missing testsbase argument 8: missing libname argument errinfo: additional info''' self.errno = errno; self.errinfo = errinfo self.args = (self.errno, self.errinfo) def __repr__(self): errors = \ [ # Begin list of errors "destination directory does not exist: %s" % self.errinfo, "configure file does not exist: %s" % self.errinfo, "selected module does not exist: %s" % self.errinfo, "%s is expected to contain gl_M4_BASE([%s])" % \ (os.path.join(self.errinfo, 'gnulib-comp.m4'), self.errinfo), "missing sourcebase argument; cache file doesn't contain it," +" so you might have to set this argument", "missing docbase argument; you might have to create GNULibImport" \ +" instance with mode 0 and docbase argument", "missing testsbase argument; cache file doesn't contain it," +" so you might have to set this argument" "missing libname argument; cache file doesn't contain it," +" so you might have to set this argument", "dependencies and testflag 'default' cannot be used together", ] # Complete list of errors if not PYTHON3: self.message = (b'[Errno %d] %s' % \ (self.errno, errors[self.errno -1].encode(ENCS['default']))) else: # if PYTHON3 self.message = ('[Errno %d] %s' % \ (self.errno, errors[self.errno -1])) return(self.message) 
  • Argparse argumentabhängigkeit
  • Ausrichten von Spalten in einer Textdatei
  • Protokollierung auf zwei Dateien mit verschiedenen Einstellungen
  • Kann die JSON-Datei nicht mit Python in CSV konvertieren
  • Python + PyCharm Dateistruktur Problem: AttributeError: 'Modul' Objekt hat kein Attribut 'X'
  • Django 1.6.1, Python 3.3.2, uwsgi 2.0 - uwsgi stürzt ab und läuft nicht
  • TypeError: b'1 'ist nicht JSON serialisierbar
  • Gibt es eine Möglichkeit, Datei-Inhalte nach Listenelement in Python zu organisieren?
  • Exif Lesung Bibliothek
  • Python 3 string.join () Äquivalent?
  • Wie man eine Liste der als Strings gespeicherten Zahlen zusammenfasst
  • Python ist die beste Programmiersprache der Welt.