使用“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]))
我有一个列表:
['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]))