Django: d'Où vient “DoesNotExist” venu?
Tout le temps dans Django je vois DoesNotExist
être soulevées comme dans db.models.fields.related.py
. Pas ObjectDoesNotExist
qui est défini dans django.core.exceptions
, mais juste DoesNotExist
. Où est cette classe d'exception définie, ou je ne suis pas entièrement comprendre les exceptions? J'ai vérifié qu'il n'est pas dans les exceptions (au moins pas que je sache). Je suis confus de toute évidence.
Remarque: Il est également livré gratuitement, comme un attribut d'un modèle sous-classe de l'instance, à l'instar de " l'auto.someforeignkey.DoesNotExist. Comment est-ce possible?
Vous devez vous connecter pour publier un commentaire.
DoesNotExist
est documenté ici:de sorte que vous pouvez parfaitement utiliser
except ObjectDoesNotExist:
et attraper tous les spécifiques au modèleDoesNotExist
exceptions qui peuvent être soulevées dans letry
clause, ou de l'utilisationexcept SomeSpecificModel.DoesNotExist:
quand vous voulez être plus précis.Si vous êtes à la recherche de l'endroit spécifique dans Django le code source d'où cet attribut est ajouté à des classes de modèle, voir ici, les lignes 34-37:
DoesNotExist
(très rare dans mon expérience), il est plus sûr pour l'utilisateurObjectDoesNotExist
.except ObjectDoesNotExist:
est pas mieux queexcept:
. Car vous ne savez pas ce qui a causé l'exception, vous êtes programme potentiellement agir sur de mauvaises informations.DoesNotExist
, tout commeMultipleObjectsReturned
, est un attribut dans une classe de modèle. Il est ajouté au modèle une fois le modèle généré.EDIT: La métaclasse responsables de ce processus est
ModelBase
(django.db.models.base
) et vous pouvez regarder pour voir ce qui se passe.