如果我删除了不需要的Eorror Here代码,我正在尝试让这段代码运行并接受输入中的小数/避免EOFError作为程序调用语法。有没有其他我应该写循环的方式?
def getWage(self):
while True:
try:
self.wages = float(input("Enter your hourly wage: "))
if self.wages <= 0:
print("Value must be a number greater than 0!")
continue
except EOFError:
print("Value must be a number greater than 0!")
continue
else:
return self.wages目前完整的代码:
def getWage(self):
while True:
try:
self.wages = float(input("Enter your hourly wage: "))
if self.wages <= 0:
print("Value must be a number greater than 0!")
continue
except EOFError:
print("Value must be a number greater than 0!")
continue
else:
return self.wages发布于 2020-12-20 10:58:02
当输入值不是预期的浮点型时,捕获的异常应该是ValueError,而不是EOFError。但是为了回答您的问题,是的,您需要检查ValueError,因为您在循环中显式地将输入值转换为浮点数。如果您尝试传递一个非数字值,例如字符串,您将得到ValueError: could not convert string to float: 'one hundred dollars'。
您可以重写您的循环,这样就不会显式地将输入值转换为float()。例如,您可以在if语句中检查if self.wages.isnumeric(),而不是在try块中使用except。
def getWage(self):
while True:
self.wages = input("Enter your hourly wage: ")
if not self.wages.replace(".", "", 1).isdigit() or float(self.wages) <= 0:
print("Value must be a numeric value greater than 0!")
continue
else:
return self.wages编辑:在上面的程序中,这是不起作用的。self.wages.isnumeric()或self.wages.isdigit()将报告假阴性,因为它们会将浮点数作为字符串读取。上面修改过的版本可以产生一个老套的解决方案,其中 self.wages.replace(".", "", 1).isdigit() 将输入中的点替换为空格,然后将其读取为一个整数以验证它是一个数字。但是,最佳实践是在将输入转换为float().时在try块中捕获ValueError
def getWage(self):
while True:
try:
self.wages = float(input("Enter your hourly wage: "))
if self.wages <= 0:
print("Value must be a number greater than 0!")
continue
except ValueError:
print("Value must be an integer or a float!")
continue
else:
return self.wageshttps://stackoverflow.com/questions/65376406
复制相似问题