The Samurai Principle

Phlip phlip2005 at gmail.com
Tue Sep 7 13:52:44 EDT 2010


On Sep 7, 10:36 am, Ian Kelly <ian.g.ke... at gmail.com> wrote:
> On Tue, Sep 7, 2010 at 10:02 AM, Phlip <phlip2... at gmail.com> wrote:
> > Back to the topic, I tend to do this:
>
> >  for record in Model.objects.filter(pk=42):
> >     return record
>
> >  return sentinel
>
> How is that any better than just catching the exception?
>
> try:
>     return Model.objects.get(pk=42)
> except Model.DoesNotExist:
>     return sentinel
>
> The flow of control is much clearer this way.

It reminds me of Visual Basic.

And no it's not "much clearer". Exceptions are for catastrophic errors
that the caller should care not to handle. A "record not found" is not
a catastrophe. Read my original post.

AAAND you need to test that the DoesNotExist occurs for the exact
reason you expect. Your except is not complete. Making it complete is
very hard, and will break as soon as the model changes.



More information about the Python-list mailing list