我没有接受过非常全面的python培训,有时不知道正确的做事方式。这些事情之一是测试我的resultQuery是否返回结果。我发现自己经常这样做:
try:
user = User.objects.get(email=email)
except DoesNotExist:
user = User()
我不了解python,但是尝试使用其他语言的catch应该是针对异常的,而不是针对正常程序流的。如果不这样做,您将如何处理?我想我想要类似的东西:
if request.GET.get('email','') is not None:
email = request.GET['email'])
异常示例通常是首选的处理方式。维基百科对此有一个很好的描述:
Python样式要求在可能出现错误情况时使用异常。在Python中,常规做法是继续尝试并使用它,而不是在实际使用文件或资源之前先测试对文件或资源的访问,如果访问被拒绝,则会捕获异常。
异常通常用作if块(...)的替代方法。经常被人称为“ EAFP”的座右铭是“寻求宽恕比获得许可更容易”。
在Python中,异常不一定会造成高昂的代价。再次引用Wikipedia示例:
if hasattr(spam, 'eggs'):
ham = spam.eggs
else:
handle_error()
... 与:
try:
ham = spam.eggs
except AttributeError:
handle_error()
尽管会有性能差异,但这两个代码示例具有相同的效果。当垃圾邮件具有“鸡蛋”属性时,EAFP示例将运行得更快。如果垃圾邮件没有鸡蛋属性(“例外”情况),则EAFP示例运行速度会变慢。
专门针对Django,我将使用异常示例。这是在该框架中执行操作的标准方法,遵循标准绝不是一件坏事:)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句