引起加注错误

时间:2015-10-27 13:04:52

标签: python python-3.x raise

我有一个错误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

问候并感谢

1 个答案:

答案 0 :(得分:2)

如果您在那里评论raise声明,则表示您没有出现错误并不代表 。它只是意味着你 处理 Exception - 在你的情况下来自我可以告诉IndexError - 通过捕捉它except Exception然后调用PrintException()

当你raise例外时,你实际做的是:

  

raise语句允许程序员强制发生指定的异常。

因此,通过取消评论,您允许IndexError名为eb的{​​{1}}在内部try-except块中捕获后重新显示,并被外部{{1}抓住你再次重新提起它的子句。

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

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

try - except

可能就足够了。