我正在编写一个代码来解决二次公式,需要异常处理,以便检测丢失的命令行参数。在except IndexError:块中,您应该使用input()向用户询问缺少的输入数据,而不是退出程序。它不能与以下代码一起工作。有谁有什么想法吗?
from math import sqrt
import sys
print('This program will solve the quadratic formula with given values, please enter below.')
try:
a=float(sys.argv[1]) #first system argument
b=float(sys.argv[2]) #second system argument
c=float(sys.argv[3]) #third system argument
d=b**2-4*a*c #discriminant
x1=((-b+sqrt(d))/2*a) #first solution
x2=((-b-sqrt(d))/2*a) #second solution
except IndexError:
raise IndexError(
'Oops! Looks like you have not entered all values. Try again.') #request user input
a=input(sys.argv[1]) #first system argument
b=input(sys.argv[2]) #second system argument
c=input(sys.argv[3]) #third system argument
d=b**2-4*a*c #discriminant
x1=((-b+sqrt(d))/2*a) #first solution
x2=((-b-sqrt(d))/2*a) #second solution
print(f'The quadratic formula with used a,b,c values gives two roots {x1:.2f} and {x2:.2f}')发布于 2020-09-21 01:22:24
我看到了几种改进原始代码的方法:
跟在判别式后面的
ValueError
float()可能抛出一个小于3个参数的错误,然后sys.argv[n]将抛出一个错误,您应该重新验证重新输入的输入,直到它是正确的。
sqrt()会通过分解验证逻辑抛出一个ValueError
下面的代码通过以下方式修复这些问题:
为负discriminant.添加验证方法以使其更加干练,并验证输入,并通过迭代器按顺序处理3个参数,该迭代器将返回“”,
from math import sqrt
import sys
print('This program will solve the quadratic formula with given values, please enter below.')
def validate(name, value):
try:
return float(value)
except ValueError:
new_value = input(f"Entered a value for {name}: ")
return validate(name, new_value)
args = iter(sys.argv)
a = validate('a', next(args, ''))
b = validate('b', next(args, ''))
c = validate('c', next(args, ''))
d=b**2-4*a*c #discriminant
if d >= 0 :
x1=((-b+sqrt(d))/2*a) #first solution
x2=((-b-sqrt(d))/2*a) #second solution
print(f"the roots {x1} and {x2}")
else:
print("the equation has no real-valued solutions")发布于 2020-09-21 03:21:13
您在catch块中引发了一个异常:
except IndexError:
raise IndexError(
'Oops! Looks like you have not entered all values. Try again.')您可以删除它,并使用input()或类似的方法提示用户此消息。例如:
except IndexError:
a= input('Oops! Looks like you have not entered all values. Enter the value again.')https://stackoverflow.com/questions/63980502
复制相似问题