You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中当convert抛出指定错误时如何重新运行main函数?

分数转燃油百分比程序优化

需求:编写Python程序,将输入的分数格式(x/y)燃油占比转换为百分比,要求输入传递给convert()函数处理。当输入无效(引发ZeroDivisionError或ValueError)时,需循环重试获取输入。

用户初始拆分函数代码(存在问题)

def main():
    # 获取用户输入的分数格式内容
    fuel = input("Fraction: ")
    print(convert(fuel),"%",sep="")
    

def convert(fraction):
    # 提取分子分母
    fraction.split('/')
    x = int(fraction[0])
    y = int(fraction[2])
    # 计算并返回百分比
    try:
        per = x / y * 100
        return round(per)
    # 忽略错误
    except ZeroDivisionError or ValueError:
        pass

# 若convert()抛出错误,重新运行main()
if __name__ == '__main__':
    main()

修正后的拆分函数实现

def main():
    while True:
        try:
            fuel = input("Fraction: ")
            percentage = convert(fuel)
            print(f"{percentage}%")
            break  # 转换成功则退出循环
        except (ZeroDivisionError, ValueError):
            # 捕获错误后直接进入下一轮循环,重新获取输入
            pass

def convert(fraction):
    # 拆分分数为分子和分母,适配任意位数的数字
    parts = fraction.split('/')
    if len(parts) != 2:
        raise ValueError("输入格式错误,需为x/y形式")
    x = int(parts[0])
    y = int(parts[1])
    # 计算百分比并返回,错误会自然抛出给main处理
    per = x / y * 100
    return round(per)

if __name__ == '__main__':
    main()

关键修改说明

  • convert()函数调整:

    1. 修复拆分逻辑:将拆分结果赋值给parts变量,通过parts[0]和parts[1]获取分子分母,解决原代码仅支持一位数输入的问题。
    2. 移除内部错误捕获:让ZeroDivisionError(除零)和ValueError(非数字输入、格式错误)直接抛出,交由main()统一处理。
    3. 增加格式校验:若拆分后不是两个部分,主动抛出格式错误提示。
  • main()函数调整:

    1. 加入while True循环,实现错误时自动重试输入。
    2. 在try块中调用convert(),转换成功则打印结果并退出循环;捕获指定错误后直接进入下一轮循环。

内容的提问来源于stack exchange,提问作者gram darlow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:00:53