Python除以0错误

时间:2014-02-28 03:55:37

标签: python calculator

我目前正在使用此Python代码:

valid_chars = "0123456789-+/* \n";
while True:
    x = "x="
    y = input(" >> ")
    x += y
    if False in [c in valid_chars for c in y]:
        print("WARNING: Invalid Equation");
        continue;
    if(y == "end"):
        break
    exec(x)
    print(x)

当用户执行以下操作时崩溃:9/0。错误:

ZeroDivisionError: division by zero

有哪些方法会阻止用户将某些内容除以零?

3 个答案:

答案 0 :(得分:6)

ZeroDivisionError之外,您可以这样

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

如果您使用的是Python 2.x,输入数据将在此处进行评估

y = input(" >> ")

所以,在Python 2.x中,您应该使用

y = raw_input(" >> ")

除此之外,您可以改进这段代码

if False in [c in valid_chars for c in y]:
像这样

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)

作为@gnibbler,在评论部分中建议,同样的条件可以像这样编写

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

另一个建议是,不需要使用半冒号在Python中标记行尾:)

答案 1 :(得分:1)

使用try

尝试封装代码
try:
  y = input(" >> ")
except Exception as exc:
  # process exception here

原因是在设置y之前读入input()进行评估。因此,由于input()而发生异常,并且必须使用try捕获:

答案 2 :(得分:1)

真正的问题是你正在执行exec()两次。第一次在构造的字符串上执行它时,此将x 的值替换为输入表达式的结果。所以你第二次尝试运行exec(64)。仔细查看try: ... except: ... else周围的逻辑流程。

最简单的解决方法是从

开始
x = "z="

然后打印z而不是x。这不应该阻止您努力避免重复执行代码。