微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EofError/While 循环

如何解决EofError/While 循环

Eorror Here 我试图让这段代码运行并在输入中接受小数/避免 EOFError 因为程序调用语法,如果我删除我不需要的except代码。 我应该用另一种方式编写循环吗?

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

解决方法

当输入值不是预期的浮点数而不是 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() 将报告错误否定,因为它们会将浮点数作为字符串读取。上面的修改版本可以产生一个hacky解决方案,其中self.wages.replace(".",1).isdigit()用空格替换输入中的点,然后将其作为int读取以验证它是一个数字。但是,最佳做法是在将输入转换为 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.wages

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。