首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EofError/While循环

EofError/While循环
EN

Stack Overflow用户
提问于 2020-12-20 10:23:12
回答 1查看 123关注 0票数 0

如果我删除了不需要的Eorror Here代码,我正在尝试让这段代码运行并接受输入中的小数/避免EOFError作为程序调用语法。有没有其他我应该写循环的方式?

代码语言:javascript
复制
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

目前完整的代码:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 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。

代码语言:javascript
复制
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

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65376406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档