@@ -280,10 +280,20 @@ def process_prog(
280280 {"stdlib" : stdlib_dict , "pdl_usage" : state .llm_usage }
281281 )
282282
283- result , document , final_scope , trace = process_block (
284- state , stdlib_scope , block = prog .root , loc = loc
285- )
286- return result , document , final_scope , trace
283+ try :
284+ result , document , final_scope , trace = process_block (
285+ state , stdlib_scope , block = prog .root , loc = loc
286+ )
287+ return result , document , final_scope , trace
288+ finally :
289+ # Close all opened files
290+ for fp in state .opened_files :
291+ try :
292+ if not fp .closed :
293+ fp .close ()
294+ except Exception :
295+ # Ignore errors during cleanup
296+ pass # nosec B110
287297
288298
289299def process_block (
@@ -2657,6 +2667,7 @@ def process_aggregator(
26572667 fp = open ( # pylint: disable=consider-using-with
26582668 file , mode = mode , encoding = encoding
26592669 )
2670+ state .opened_files .append (fp ) # Track for cleanup
26602671 aggregator = FileAggregator (fp , prefix = prefix , suffix = suffix , flush = flush )
26612672 case _:
26622673 assert False , "Unexpected aggregator"
0 commit comments