python django异常处理
我有一个使用异常的查询:python django异常处理,python,django,exception-handling,Python,Django,Exception Handling,我有一个使用异常的查询: try: sm = Something.objects.get(id=5) except Something.DoesNotExist: pass 这是pass做什么的?我的意思是,如果我的整个视图依赖于sm,而它没有得到sm,该怎么办。我应该手动设置“sm”吗 except Something.DoesNotExist: sm = anything 我只是想知道,如果pass找不到所查询的内容,该怎么办。如果它只是忽略了except后面的部
try:
sm = Something.objects.get(id=5)
except Something.DoesNotExist:
pass
这是pass做什么的?我的意思是,如果我的整个视图依赖于sm
,而它没有得到sm
,该怎么办。我应该手动设置“sm”吗
except Something.DoesNotExist:
sm = anything
我只是想知道,如果pass找不到所查询的内容,该怎么办。如果它只是忽略了except后面的部分,然后再进一步,那又有什么意义呢,因为我的整个观点取决于sm
谢谢你,当你因为缩进规则而需要一条语句,但又不想写代码时,它很有用
如果您删除它以获得代码:
try:
sm = Something.objects.get(id=5)
except Something.DoesNotExist:
它将因语法错误而失败
至于如果找不到要查找的项目该怎么办,这在很大程度上取决于代码的其余部分。但是,在这种情况下,最好向某人显示错误,因为这就是发生的情况-您请求了一个不存在的项目。
pass
是无操作
,不执行任何操作。它需要在块中,除了
之外,才能符合python语法。上述上下文中的关键字pass
忽略DoesNotExist
异常。如果程序依赖于代码中某个地方是否存在sm
,则应将其设置为None
,并在需要时检查其值
try:
sm = Something.objects.get(id=5)
except Something.DoesNotExist:
sm = None
if sm:
...
或者,您可以在try/catch块的else
部分中执行您的工作。仅当try
块中的代码未引发异常时,才会执行该命令
try:
sm = Something.objects.get(id=5)
except Something.DoesNotExist:
# do something here..
else:
print sm
...
此外,如果您只想在找不到该对象时通过404异常,请改用以下命令:
Something=get\u object\u或_404(Something,id=5)
如果在exception中找不到该对象,是否可以设置默认值。除了Something.DoesNotExist:sm=“someone”AFAIK之外,Django没有为这种情况提供快捷方式方法,但当然可以在Python中实现。但是,如果您已经有了默认值,我建议您将其设置在try/catch之上的某个位置,以提高代码的可读性。你可以编写一些方法,比如get\u object\u或\u default(Something,id=5,default=“someone”)
。ohk那么这是怎么回事,比如我想使用sm的属性,比如sm.phone\u否如果我没有得到sm,那么我如何设置phone\u no of sm的默认值除非创建实例,否则你不能使用实例(在这种情况下是sm)属性。您应该将电话号码的默认值设置为类属性
,可能类似于something.default\u phone\u NO
,这样即使未创建sm
,您也可以使用它。