open() file objects are not iterable
Author: ggozadCreated Jun 4, 2026Updated Sep 18, 2026
Summary
File objects returned by open() support .read(), .readline(), and .readlines(), but are not iterable. Any iteration form, for line in f, list(f), iter(f) or a comprehension raises TypeError: '_io.TextIOWrapper' object is not iterable
Minimal reproduction
- pydantic-monty 0.0.18
- macOS (arm64), CPython 3.13
from pydantic_monty import Monty, MemoryFile, OSAccess
vfs = OSAccess([MemoryFile("/data/lines.txt", "alpha\nbeta\ngamma\n")])
def run(code):
out = []
Monty(code).run(os=vfs, print_callback=lambda s, t: out.append(t))
return "".join(out).strip()
# These all work:
print(run("print(len(open('/data/lines.txt').read()))")) # 17
print(run("print(len(open('/data/lines.txt').readlines()))")) # 3
print(run("print(open('/data/lines.txt').readline().strip())")) # alpha
print(run("with open('/data/lines.txt') as f:\n print(f.read(5))")) # alpha
# This raises TypeError: '_io.TextIOWrapper' object is not iterable:
print(run("for line in open('/data/lines.txt'):\n print(line.strip())"))Source: pydantic/monty