2015-10-27 3 views
1

У меня есть ошибка 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 

С уважением и благодарностью

+0

укажите, пожалуйста, ваш стек – CrakC

ответ

2

Если вы прокомментируете raise заявление там, это не означает, что вы не имеют ошибку; это просто означает, что вы обрабатываютсяException - в вашем случае это от того, что я могу сказать об IndexError - поймав его с except Exception и затем вызвать PrintException().

Когда вы raise исключением того, что вы на самом деле сделать это:

Рейз заявление позволяет программисту заставить возникнуть указано исключение.

Так, ип-комментирование, вы позволяете IndexError имени eb повторно появляются после ловли его во внутреннем блоке try-except и пойман внешнего try - except пункта, в котором вы снова повторно поднять его.


Как правило, вы не хотите, чтобы перехватывать исключения в таком общем виде, так как это может скрыть некоторое непредвиденное поведение программы, которую вы хотели бы знать.

Предел исключения вы ловите в, за исключением пункта, просто указав их в вашем случае, за исключением пункта вида:

except IndexError as eb: 
    PrintException() 

вероятно будет достаточно.

Смежные вопросы