【问题标题】:raise in raise error引发错误
【发布时间】:2016-01-26 21:53:06
【问题描述】:

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

问候和感谢

【问题讨论】:

  • 请包含您的堆栈跟踪

标签: python python-3.x raise


【解决方案1】:

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

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

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

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


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

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

except IndexError as eb:
    PrintException() 

可能就足够了。

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2014-02-20
    • 2015-07-04
    相关资源
    最近更新 更多