Python 如何仅将某些查询应用于具有属性异常的查询

Python 如何仅将某些查询应用于具有属性异常的查询,python,django,error-handling,Python,Django,Error Handling,在我的Pinterest clone web应用程序中,我已经克隆了他们的pin评论部分,如下所示: try: pin_comment_info = [{"user": comment.user.email.split("@")[0], "comment": model_to_dict(comment)} for comment in pin_comment] except AttributeError: pin_comment_info

在我的Pinterest clone web应用程序中,我已经克隆了他们的pin评论部分,如下所示:

try:
            pin_comment_info    = [{"user": comment.user.email.split("@")[0], "comment": model_to_dict(comment)} for comment in pin_comment]
except AttributeError:
            pin_comment_info    = [{"user": comment.user.social_id, "comment": model_to_dict(comment)} for comment in pin_comment]
出现这种错误处理是因为当我尝试下面这样的Q对象时,它仍然不起作用:

pin_comment_info    = [{"user": (Q(comment.user.email.split("@")[0]) | Q(comment.user.socia_id)), "comment": model_to_dict(comment)} for comment in pin_comment]
在用户表中,有些用户有电子邮件地址,而有些用户没有。我希望评论中包含作者(用户)的电子邮件前缀(如果存在),以及社交ID(如果表中没有电子邮件)。有没有办法避免这种错误的处理?即使有些用户有电子邮件地址,第一个代码也只返回用户的社交id


非常感谢你

只需使用显式循环即可

pin_comment_info = []
for comment in pin_comment:
   try:
       user = comment.user.email.split("@")[0]
   except AttributeError:
       user = comment.user.social_id
   pin_comment_info.append({"user": user, "comment": model_to_dict(comment)})
或者,如果要使用列表理解,则首先定义一个函数,该函数一次对一条注释进行操作,然后从列表理解中调用该函数:

def get_user(comment):
   try:
       return comment.user.email.split("@")[0]
   except AttributeError:
       return comment.user.social_id

pin_comment_info = [{"user": get_user(comment), "comment": model_to_dict(comment)} for comment in pin_comment]

只需使用显式循环

pin_comment_info = []
for comment in pin_comment:
   try:
       user = comment.user.email.split("@")[0]
   except AttributeError:
       user = comment.user.social_id
   pin_comment_info.append({"user": user, "comment": model_to_dict(comment)})
或者,如果要使用列表理解,则首先定义一个函数,该函数一次对一条注释进行操作,然后从列表理解中调用该函数:

def get_user(comment):
   try:
       return comment.user.email.split("@")[0]
   except AttributeError:
       return comment.user.social_id

pin_comment_info = [{"user": get_user(comment), "comment": model_to_dict(comment)} for comment in pin_comment]

使用显式循环。Nicholas-有人对我的答案投了赞成票,但有一个打字错误会阻止它工作(附加到错误的对象)。如果你已经试过了,请拿一个新的副本。使用一个显式循环。Nicholas-有人对我的答案投了赞成票,但它有一个打字错误,这会阻止它工作(附加到错误的对象)。如果你已经试过了,请拿一份新的。