DeprecationWarning: BaseException.le message a été abandonnée à partir de la version 2.6 de Python exception.__la classe__, d'exception.message,
Quelqu'un peut me dire la vraie raison derrière l'avertissement que je suis arriver dans ce Django middleware, et comment puis-je résoudre ce problème?
Je reçois ce message "DeprecationWarning: BaseException.le message a été abandonnée à partir de la version 2.6 de Python exception.classe, d'exception.message,"
class GeneralMiddleware(object):
def process_exception(self, request, exception):
if exception.__class__ is SandboxError:
# someone is trying to access a sandbox that he has no
# permission to
return HttpResponseRedirect("/notpermitted/")
exc_type, value, tb = sys.exc_info()
data = traceback.format_tb(
tb, None) + traceback.format_exception_only(
exc_type, value)
msg = (
"Failure when calling method:\n"
u"URL:'%s'\nMethod:'%s'\nException Type:'%s'\n"
u"Error Message '%s'\nFull Message:\n%s"
% (request.get_full_path(), request.method,
exception.__class__, exception.message,
- Essayez
isinstance(exception, SandboxError)
au lieu deexception.__class__ is SandboxError
. - Il ne fonctionne pas pour moi blender... merci pour votre réponse rapide. En fait, je reçois le message d'avertissement sur le d'exception.__la classe__, d'exception.le message de cette ligne.
Vous devez vous connecter pour publier un commentaire.
Si je me souviens bien, quand Python passés à la nouvelle soulever la syntaxe en 2.5(?), ils se sont débarrassés de la
message
membre en faveur d'uneargs
tuple. Pour des raisons de compatibilité ascendante,BaseException.message
est effectivement la même chose queBaseException.args[0] if BaseException.args else None
, mais vous ne devriez pas l'utiliser dans le nouveau code.Donc, changement
message
soitargs
(si vous voulez que tous les args) ouargs[0]
(ou, si vous êtes inquiet il y a peut-être pas d'arguments, l'amateur version qui protège contre les()
), selon ce que vous voulez.La raison de ce changement est que, avec le nouveau style exceptions, il n'y a pas de magie à
raise
ouexcept
plus; vous êtes simplement appeler l'exception du constructeur de la classe dans leraise
déclaration et de la capture de l'exception dans une variable dans leexcept
déclaration. Donc:Cette impression sera
('Out of cheese error', 42)
. Si vous n'aviezprint x.message
vous serait juste obtenir'Out of cheese error'
. Ainsi, à l'Exception des sous-classes qui l'habitude d'avoir à faire des choses de fantaisie à effectuer autour d'un code d'erreur en tant que membre séparé, etc., peut être simplifiée; en fait, la chose revient à ceci:Est votre
SandboxError
classe héritée de laException
classe? Si pas, vous obtiendrez ce message. Le raisonnement est décrit dans PEP352.Dans le code, l'exception doit être définie ainsi: