I need help with making my claculator

Chris Angelico rosuav at gmail.com
Fri May 19 22:10:30 EDT 2017


On Sat, May 20, 2017 at 11:40 AM,  <gareths2017 at cardensv.com> wrote:
> def calc(self, display):
>     try:
>         display.set(eval(display.get()))
>     except:
>         display.set("Type an actual equation please!")

Without any specific questions, you're not going to get anything more
than a basic eyeballing of the code. So I'm going to say this: Don't
do this! Just plain don't! A bare "except" clause is almost never the
right thing to do, and on the rare occasions when you really want to
catch everything, at very least, report on the actual error. You're
using eval(), which means that any code can be executed, which means
that literally any exception could occur. Additionally, your
try/except is around the set and get, too. Here's how I would write
this:

def calc(self, display):
    equation = display.get()
    try:
        result = eval(equation)
    except (ValueError, TypeError):
        result = "<unsuitable data>"
    except Exception as e:
        result = "<%s: %s>" % (type(e).__name__, str(e))
    display.set(result)

That lets you give much friendlier messages on known exceptions, and
still be informative and helpful on unknown ones.

ChrisA



More information about the Python-list mailing list