使用“try except”公式时出现 ValueError

ValueError during using 'try except'formula

我有一个列表:

['x', '-', '1', '=', '5']

这是我写的代码:

if (a[1]) == '+':
    try:
        print(int(int(a[0])+int(a[2])))
    except ValueError:
        print(int(int(a[0])+int(a[4])))
    except ValueError:
        print(int(int(a[2])+int(a[4])))

if (a[1]) == '-':
    try:
        print(int(int(a[0])-int(a[2])))
    except ValueError:
        print(int(int(a[0])-int(a[4])))
    except ValueError:
        print(int(int(a[4])-int(a[2])))

但是这个 'try except' 显示以下错误,不能 运行。

Traceback (most recent call last):   File "Main.py", line 16, in <module>
    print(int(int(a[0])-int(a[2]))) ValueError: invalid literal for int() with base 10: 'x'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):   File "Main.py", line 18, in <module>
    print(int(int(a[0])-int(a[4]))) ValueError: invalid literal for int() with base 10: 'x'

谁能告诉我如何修复此代码?

当我运行使用列表时:

['1', '+', '3', '=', 'x']

这确实有效。

错误发生在 except 内部,并且 except 内部没有处理错误的 try,因此错误传播。

try 放在异常中,这样它们就不会出错。

这里的主要问题,与你的except有关!当使用多个时,每个都应该涵盖一个异常,并且您对两者使用相同的异常,这会导致程序无法 运行 正确。

除此之外,您的代码还有一些问题(幸好有一个简单的解决方案):
1) 你在没有必要的情况下使用了太多的 cast int() -> 一旦你使用了 int(a[n]),它已经是一个整数,所以不需要在操作结果中重做它
2) 您将接收操作字符串的逻辑过于复杂化,并将其转换为算术运算符

为了解决这个问题,我的建议是:

import operator

operators = {
    '+' : operator.add,
    '-' : operator.sub,
    '*' : operator.mul,
    '/' : operator.truediv,
    '%' : operator.mod,
    '^' : operator.xor,
}

# Got to find which are the digits to operate
numbersToOperate = [int(a[i]) for i in (0,2,4) if a[i].isdigit()]

if (a[0] == str(numbersToOperate[0])):
    print(operators[a[1]](numbersToOperate[0], numbersToOperate[1]))
else:
    print(operators[a[1]](numbersToOperate[1], numbersToOperate[0]))