#490·monty

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
python
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())"))