EOF是输入流结束的逻辑状态,文件读取时read()或readline()返回空字符串即达EOF,input()遇EOF则抛出EOFError异常。

Python 中的 EOF(End of File,文件结束)不是一个函数或类型,而是一个**逻辑状态或信号**,表示当前输入流(比如文件、标准输入 sys.stdin)已无更多数据可读。
EOF 在文件读取中怎么体现
Python 文件对象本身没有 .eof() 方法(这点和某些其他语言不同)。判断是否到达 EOF,靠的是读取方法的返回值:
-
file.read()或file.readline()返回空字符串'',说明已到文件末尾; -
for line in file:循环天然避开 EOF 判断——它内部自动检测并终止; - 用
readlines()一次性读完所有行,也无需手动处理 EOF。
EOF 在交互输入中容易出错
调用 input() 时若输入流被提前关闭(例如用户在终端按 Ctrl+D(Linux/macOS)或 Ctrl+Z(Windows)),会立即抛出 EOFError 异常:
- 这不是 bug,而是 Python 明确告诉你“没输入了”;
- 常见于在线判题系统或脚本批量读取标准输入的场景;
- 应使用
try-except EOFError:捕获并优雅退出。
别把 EOF 和 EOFError 混淆
EOF 是状态,EOFError 是异常:
立即学习“Python免费学习笔记(深入)”;
- 读文件时遇到 EOF 不会报错,只是返回空;
- 但
input()遇到 EOF 就一定会触发EOFError; - 没有叫
eof()的内置函数,网上某些示例是误传或混淆了其他语言(如 VB)的语法。
实际写法建议
安全读文件:
with open('data.txt') as f:
for line in f: # 自动停在 EOF,最推荐
process(line)
安全读标准输入(防 EOFError):
try:
while True:
line = input().strip()
if not line:
break
handle(line)
except EOFError:
pass # 输入结束,正常退出











