Zybooks在线编程环境运行Python代码触发第5行EOFError问题求助
Python代码在Zybooks平台运行出现EOFError的成因与解决方案
报错背景
你编写的代码如下:
user_num = int(input('Enter integer:\n')) print(user_num) print(user_num, 'squared is', user_num * user_num) print('And', user_num, 'cubed is', user_num * user_num * user_num, '!!') user_num2 = int(input('Enter another integer:\n')) print(user_num2) print(user_num, '+', user_num2, 'is', user_num + user_num2) print(user_num, '*', user_num2, 'is', user_num * user_num2)
报错信息如下:
Traceback (most recent call last): File "main.py", line 5, in <module> user_num2 = input('Enter another integer:\n') EOFError: EOF when reading a line
问题成因
- 根本原因:代码执行到第5行调用
input()读取第二行输入时,系统输入流已经读取完毕,无剩余内容可读,因此抛出EOFError。 - 平台特定成因:Zybooks的自动评测系统使用预设的固定测试输入,不会像本地IDE一样等待用户手动输入。如果测试用例仅配置了1行输入,或是你误解了作业输入要求(比如要求两个整数在同一行输入而非分两行输入),就会触发该错误。
- 手动运行场景成因:如果是手动点击运行,你没有在平台编码区的输入面板中提前填写完整的两行输入内容,仅提供了第一行输入,也会导致第二次读取时无内容可用。
可行解决方案
- 核对作业输入规则:首先确认作业要求的输入格式,若要求两个整数在同一行空格分隔输入,可将代码修改为一次性读取拆分的形式:
# 适配同一行输入两个整数的需求 user_num, user_num2 = map(int, input('Enter two integers:\n').split()) # 后续逻辑保持不变 print(user_num) print(user_num, 'squared is', user_num * user_num) print('And', user_num, 'cubed is', user_num * user_num * user_num, '!!') print(user_num2) print(user_num, '+', user_num2, 'is', user_num + user_num2) print(user_num, '*', user_num2, 'is', user_num * user_num2)
- 完善平台输入配置:如果确认要求分两次输入,手动运行时先在平台输入框中填写两行内容,第一行为第一个整数,第二行为第二个整数,再点击运行;如果是自动评测报错,联系课程工作人员确认测试用例是否配置了完整的两行输入。
- 添加异常兼容逻辑:若允许调整代码做兼容,可通过异常捕获避免程序直接崩溃:
try: user_num = int(input('Enter integer:\n')) print(user_num) print(user_num, 'squared is', user_num * user_num) print('And', user_num, 'cubed is', user_num * user_num * user_num, '!!') user_num2 = int(input('Enter another integer:\n')) print(user_num2) print(user_num, '+', user_num2, 'is', user_num + user_num2) print(user_num, '*', user_num2, 'is', user_num * user_num2) except EOFError: print("输入不完整,请提供两个符合要求的整数输入")
- 核对提示文本格式:部分Zybooks评测系统会严格匹配输出的提示内容,确认
input中的提示文本、换行符是否和作业要求完全一致,避免因提示不匹配导致系统未正确传入第二行输入。
内容的提问来源于stack exchange,提问作者Thionine
相关产品推荐
相关产品推荐

