引发错误

raise in raise error

我有一个错误 raise eb : list index out of range

我不明白为什么我在另一个 try - catch 中加注 我在 try - catch 中执行 try - catch 并且都引发了错误。

这是我的代码,错误行在 raise eb :

try:
    print("debut edit")
    print(p)
    modif_box = get_modif_box_profile(p)
    post_box = get_Post_Box(p)
    print("modi_box")
    print(modif_box)
    print("mbu id")
    print(modif_box.id)
    diff = {}
    posts = {}
    new_post = []
    diff["posts"] = posts
    posts["modified_post"] = new_post
    for post in modif_box.edit_post_user.all():
        # print(post.id_mod)
        try:
            messagenew = post_box.post.all().filter(id=post.id_mod)[0]
            # print(post_new)
            print("posts")
            print(post)
            # todo a factoriser
            if messagenew.id > int(last_id) and messagenew.sender.id != p.id:
                name = get_name_contact(p, messagenew)
                return_post = {}
                return_post["uid"] = messagenew.sender.id
                return_post["pid"] = messagenew.id
                return_post["author"] = name
                return_post["title"] = messagenew.title
                return_post["date"] = unix_time_millis(messagenew.date)
                return_post["smile"] = count_smile(messagenew)
                return_post["comment"] = count_comment(messagenew)
                return_post["data"] = messagenew.data
                return_post["type"] = messagenew.type_post.type_name
                new_post.append(return_post)
            else:
                print("depop edit")
                modif_box.edit_post_user.remove(post)
                modif_box.save()
        except Exception as eb:
            PrintException()
            # raise eb (if i decomment here i have an error in my program)
    print(diff)
    return diff
except Exception as e:
    PrintException()
    raise e

问候和感谢

如果您在此处评论 raise 语句,并不意味着您 没有 错误;它只是意味着你 处理了 Exception - 在你的情况下,我可以告诉 IndexError -- 通过 except Exception 捕获它然后调用 PrintException()

当你 raise 异常时,你实际做的是:

The raise statement allows the programmer to force a specified exception to occur.

因此,通过取消注释,您允许名为 ebIndexError 在内部 try-except 块中捕获它并被外部 [=] 捕获后重新出现20=] 子句,您在其中再次提出它。


通常,您不希望以这种通用方式捕获异常,因为它可能隐藏了您想了解的程序的某些不可预测的行为。

通过简单地指定它们来限制您在 except 子句中捕获的异常,在您的情况下,形式为以下形式的 except 子句:

except IndexError as eb:
    PrintException() 

可能就足够了。