Python Divide by 0 Error

前端 未结 3 1862
别那么骄傲
别那么骄傲 2021-01-29 13:34

I am currently using this Python code:

valid_chars = \"0123456789-+/* \\n\";
while True:
    x = \"x=\"
    y = input(\" >> \")
    x += y
    if False in          


        
相关标签:
3条回答
  • 2021-01-29 14:08

    You can except the ZeroDivisionError like this

    x = "1/0"
    try:
        exec(x)
    except ZeroDivisionError:
        print ("WARNING: Invalid Equation")
    

    If you are using Python 2.x, the input data will be evaluated here itself

    y = input(" >> ")
    

    so, in Python 2.x, you should be using

    y = raw_input(" >> ")
    

    Apart from that, you can improve this piece of code

    if False in [c in valid_chars for c in y]:
    

    like this

    valid_chars = set("0123456789-+/* \n")    # We make this a set, because
    if not all(c in valid_chars for c in y):  # c in valid_chars will be in O(1)
    

    As @gnibbler, suggested in the comments section, the same if condition can be written like this

    if any(c not in valid_chars for c in y):  # c in valid_chars will be in O(1)
    

    Another suggestion would be, no need to use semi colons to mark the end of line in Python :)

    0 讨论(0)
  • 2021-01-29 14:09

    encapsulate your code with a try except

    try:
      y = input(" >> ")
    except Exception as exc:
      # process exception here
    

    The reason is the input() is being evaluated as it is read in before y is set. Thus the exception occurs because of the input() and must be caught with the try: .

    0 讨论(0)
  • 2021-01-29 14:14

    The real problem is that you are executing exec() twice. The first time you execute it on the string you have constructed, and this replaces the value of x with the result of your entered expression. So the second time you are presumably trying to run exec(64). Look more carefully at the logic flow around try: ... except: ... else.

    The simplest fix is to start with

    x = "z="
    

    and then print z rather than x. This should not stop you working to avoid the duplicated execution of your code.

    0 讨论(0)
提交回复
热议问题