0

我有一个可能存在也可能不存在的对象。由于这个事实,我将语句包装在 try / except 块中。

try:
        generic_type = ContentType.objects.get_for_model(myentity)
        my_object = MyObject.objects.filter(content_type__pk=generic_type.id, object_id=myentity.id)[0]
except:

我问的原因是因为在这种情况下我没有任何东西可以放入例外条件,但是 django/python 需要它。

这是处理这种情况的正确方法吗?如果是,我应该在“除外”之后添加什么?

4

2 回答 2

3

You can use the pass statement anywhere a statement is required when you want to do nothing, although you should specify the actual exception to catch.

except WhateverExceptionGetsRaised:
    pass
于 2013-08-15T23:21:40.383 回答
0

如果您正在检索基于“PK”的对象,那么它只会返回一个对象。不需要多个过滤器。代替:

my_object = MyObject.objects.filter(content_type__pk=generic_type.id, object_id=myentity.id)[0]

您可以使用:

my_object = MyObject.objects.get(content_type__pk=generic_type.id, '')

如果您希望它不返回任何内容,则可以使用它,因此如果它无法获取指定的第一个对象,则使用双单引号。这可能是比 try/except 模式更简洁的答案。此外,使用:

filter()[0] vs. get()

都将返回一个对象,但filter()[0]返回一个QuerySet对象类型,其中 asget()仅返回对象,所以这是另一件要考虑的事情。

于 2013-08-15T23:47:47.117 回答