Files
Medios-Macina/scripts/check_try_balance.py
2026-01-19 03:14:30 -08:00

36 lines
1.2 KiB
Python

from pathlib import Path
p=Path('SYS/pipeline.py')
s=p.read_text(encoding='utf-8')
lines=s.splitlines()
stack=[]
for i,l in enumerate(lines,1):
stripped=l.strip()
# Skip commented lines
if stripped.startswith('#'):
continue
# compute indent as leading spaces (tabs are converted)
indent = len(l) - len(l.lstrip(' '))
if stripped.startswith('try:'):
stack.append((indent, i))
if stripped.startswith('except ') or stripped=='except:' or stripped.startswith('finally:'):
# find the most recent try with same indent
for idx in range(len(stack)-1, -1, -1):
if stack[idx][0] == indent:
stack.pop(idx)
break
else:
# no matching try at same indent
print(f"Found {stripped.split()[0]} at line {i} with no matching try at same indent")
print('Unmatched try count', len(stack))
if stack:
print('Unmatched try positions (indent, line):', stack)
for indent, lineno in stack:
start = max(1, lineno - 10)
end = min(len(lines), lineno + 10)
print(f"Context around line {lineno}:")
for i in range(start, end + 1):
print(f"{i:5d}: {lines[i-1]}")
else:
print("All try statements appear matched")