Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python django异常处理_Python_Django_Exception Handling - Fatal编程技术网

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
,您也可以使用它。