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()函数调整:- 修复拆分逻辑:将拆分结果赋值给
parts变量,通过parts[0]和parts[1]获取分子分母,解决原代码仅支持一位数输入的问题。 - 移除内部错误捕获:让
ZeroDivisionError(除零)和ValueError(非数字输入、格式错误)直接抛出,交由main()统一处理。 - 增加格式校验:若拆分后不是两个部分,主动抛出格式错误提示。
- 修复拆分逻辑:将拆分结果赋值给
main()函数调整:- 加入
while True循环,实现错误时自动重试输入。 - 在
try块中调用convert(),转换成功则打印结果并退出循环;捕获指定错误后直接进入下一轮循环。
- 加入
内容的提问来源于stack exchange,提问作者gram darlow
相关产品推荐
相关产品推荐

