Python 发生异常时如何要求用户输入?
我正在编写一个代码来解决二次公式,需要异常处理,以便丢失命令 检测到行参数。在Python 发生异常时如何要求用户输入?,python,exception,math,Python,Exception,Math,我正在编写一个代码来解决二次公式,需要异常处理,以便丢失命令 检测到行参数。在除索引器外的块中:而不是退出 您应该使用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.a
除索引器外的块中:
而不是退出
您应该使用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}')
我看到了几种改进原始代码的方法:
之后的语句永远不会执行raise
- 通过
转换字符串可能引发float()
ValueError
- 如果提供的参数少于3个,则
将抛出错误sys.argv[n]
- 您应该重新验证重新输入的输入,直到其正确
- 如果以后的值出现问题,则不应触发正确值的重新输入
- 如果判别式d为负,
将抛出一个sqrt()
ValueError
- 通过分解验证逻辑,使您的代码变得干燥(不要重复)
- 您需要一些方法来完成输出
- 添加一个验证方法,使其更加干燥,并验证输入和处理
ValueError
- 通过迭代器按顺序处理3个参数,如果未提供,迭代器将返回“”,validate方法将处理该参数
- 阴性鉴别测试
您正在catch块内引发un异常:
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.')
您捕获了异常并再次引发它。Remove
raise IndexError
sys.argv
是一个包含所有给定命令行参数的列表。如果在启动程序时没有给出正确的参数,那么一旦尝试处理异常,它们就不会神奇地出现。相反,可以考虑使用input()
与用户交互。进入except
块后,就可以使用sys.argv
。您直接向用户询问价值。更简单的方法是退出程序,首先让用户传递正确的参数。使用argparse
模块处理命令行参数(以及与此相关的错误)。在执行任何其他操作之前,请检查sys.argv
的长度,并确保提供了正确数量的参数,如果没有,请使用input()
获取它们)或打印错误消息并退出)。
except IndexError:
a= input('Oops! Looks like you have not entered all values. Enter the value again.')