Situation: Ich habe einige benutzerdefinierte Exception-Klassen in meiner Bibliothek, die von Benutzern in ihrem Code verwendet werden. Aus irgendeinem Grund möchte ich eine der Ausnahmen umbenennen und die alte ablehnen.Kann eine Exception-Klasse veraltet werden?
die alte Ausnahme als Alias zu halten, ist nicht schwer:
class MyNewError(ValueError):
pass
MyOldError = MyNewError
Aber schließlich würde Ich mag die alten Fehler Namen für meine Bibliothek entfernen, und deshalb Nutzer Ich möchte, die in Downstream-Code diese benutzerdefinierte Ausnahme verwenden mit einem DeprecationWarning benachrichtigt werden, dass dieser Fehler entfernt wird.
Aber ich will den DeprecationWarning in der folgenden usecase erhöhen (sagen, dass meine Bibliothek der benutzerdefinierten Ausnahmen enthält mypackage
genannt wird):
# downstream user code
import mypackage
...
try:
....
except mypackage.MyOldError:
....
Deshalb mag ich die Warnung erhöhen, wenn der Benutzer zu versucht catch der Fehler, nicht nur, wenn der Benutzer den Fehler auslösen würde.
Ist es möglich, dies in irgendeiner Weise zu tun? (da der Benutzer hier keine Funktion aufruft, in der ich eine Verwarnungswarnung auslösen kann)
Ich glaube nicht, Sie können - Sie vermutlich nicht wollen, eine Warnung jedes Mal, wenn jemand importiert 'mypackage', und ich nicht erhöhen denke, es gibt eine sinnvolle Möglichkeit, '__getitem__' auf Modulebene zu überschreiben (siehe zB http://Stackoverflow.com/q/10438894/3001761 - es ist peinlich). – jonrsharpe