PyCharm中纸张尺寸转换器为何报‘Invalid literal for int() with base 10’错误?
解决纸张尺寸转换器的ValueError及逻辑问题
错误原因
ValueError: invalid literal for int() with base 10: '' 是因为你直接将空字符串传给了int()函数——当输入框为空就回车时,input()返回空字符串,转整数必然报错。
另外程序还有两个隐性问题:
- 无限循环:
run_again始终为True,程序会一直重复运行,你说的"第二次运行异常"其实是循环的下一轮输入出错。 - 大尺寸纸张计算错误:当
grade < 4时,仅执行了一次尺寸放大,但recur = 4 - grade(比如grade=2时recur=2),需要循环对应次数才能得到正确的A2尺寸。
修正后的代码
run_again = True while run_again: x = 210 # 初始为A4短边 k = 2 ** 0.5 # √2 # 输入验证:处理空输入、非数字输入 while True: grade_input = input("Grade A: ") if not grade_input.strip(): print("请输入有效数字(如3、4、5)") continue try: grade = int(grade_input) break except ValueError: print("输入无效,请输入整数") if grade > 4: # 尺寸小于A4 recur = grade - 4 for i in range(recur): x = (x * k) / 2 y = x * k elif grade < 4: # 尺寸大于A4 recur = 4 - grade y = x * k # 先初始化A4的长边 for i in range(recur): # A系列放大规则:新短边=原长边,新长边=原短边×2 x, y = y, 2 * x else: # grade ==4 y = x * k x = round(x, 2) y = round(y, 2) print(f"{x}mm x {y}mm") # 询问是否继续运行 while True: choice = input("是否继续?(y/n): ").strip().lower() if choice in ('y', 'n'): run_again = (choice == 'y') break print("请输入y或n")
核心修正说明
- 输入校验:通过
try-except捕获非数字输入,同时判断空输入,避免直接转int报错。 - 修复大尺寸计算:对
grade <4的情况添加循环,严格遵循A系列纸张的放大规则,确保大尺寸(如A2、A1)计算正确。 - 添加循环终止逻辑:每次计算后询问用户是否继续,避免无限循环。
- 代码简化:使用f-string替代
format,让输出代码更简洁。
内容的提问来源于stack exchange,提问作者Edrawrxd
相关产品推荐
相关产品推荐

