Only a message at the highest exception

Cecil Westerhof Cecil at decebal.nl
Fri Jun 28 06:17:32 EDT 2019


Chris Angelico <rosuav at gmail.com> writes:

> On Fri, Jun 28, 2019 at 7:33 PM Cecil Westerhof <Cecil at decebal.nl> wrote:
>>
>> I have a tkinter program where I have a function generate_report which
>> in a try block calls the function append_row. This function has also a
>> try block. When they get an exception they give message. But when
>> append_row has already given a message then generate_report should
>> not. To implement this I use the following class:
>>     class AlreadyHandledException(Exception):
>>         pass
>>
>> Then in append_row I have:
>>     except Exception as err:
>>         messagebox.showerror(error_str,
>>                              error_append + '\n\n\n\n' + str(err))
>>         raise AlreadyHandledException()
>>
>> And in generate_report I have:
>>     except Exception as err:
>>         if type(err).__name__ != "AlreadyHandledException":
>>             messagebox.showerror(error_str,
>>                                  error_generate + '\n\n\n\n' + str(err))
>>         progress.pack_forget()
>>
>> Is this an acceptable way, or should I do it differently?
>>
>
> Well, first off, I would use two separate except clauses, rather than
> a type check.

You are completely right.


> But are you able to just NOT catch the exception inside
> append_row? Let it be handled at the top level only.

I am giving different messages. I changed the top part to:
    except AlreadyHandledException:
        pass
    except Exception as err:
        messagebox.showerror(error_str, error_generate + '\n\n\n\n' + str(err))
    progress.lower()

-- 
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof



More information about the Python-list mailing list