Code: Alles auswählen
def handler(exceptionobject):
# do something with the error
codecs.register_error('my_error_handler', handler)
Code: Alles auswählen
'superduperstring'.decode('utf-8', 'my_error_handler')
# oder
u'unicode ist toll'.encode('utf-8', 'my_error_handler')
Hintergrund ist der Umstand, dass ich eine Objektmethode als Errorhandler nutze, welche selbst ein anderes Objektattribut nutzt, was bei weiteren erstellten Objekten zu Problemen führen könnte, Beispiel:
Code: Alles auswählen
class Foo(object):
def __init__(self):
self.attribtX = 'whatever'
codecs.register_error('my_error_handler', self.handler)
def handler(self,exception):
# errorhandling with self.attribX
f1 = Foo() # hier ist noch alles gut
f2 = Foo() # hier mappen alle Errors von f1 auf den Handler von f2, falls interpreter-global
Edit:
Im Übrigen wird decode('encoding', 'my_error_handler') selbst nur innerhalb einer anderen Methode des Objektes genutzt. Daher reduziert sich evtl. das Problem auf die Frage, ob bei erneutem Durchlauf von decode('encoding', 'my_error_string') in f1 der String für den Handler neu ausgewertet wird (was nach Erzeugung von f2 dann auf den "falschen" Errorhandler zeigen würde).