После спотыкания на this question Я играл с exec(), чтобы лучше понять, как это работает. Я пытаюсь получить эту мерзость скрипта, чтобы увеличить глобальную переменную, прочитать себя и вызвать exec с новым глобальным значением, пока не будет достигнут предел рекурсии. Лучшее, что я смог придумать, - это один файл объявить глобальный, а затем вызвать следующий файл (точный дубликат минус объявление переменной), который затем рекурсивно вызовет сам. Вот код для первого:Рекурсия на уровне exec() с глобалями
# recurse.py
def func():
global x
x += 1
with open('recurse2.py', 'r') as f:
try:
exec(f.read(), {'x': x})
except RecursionError:
print('maximum recursion depth reached at', x)
x = 0
func()
А вот файл он выполняет, который будет выполнять сам:
# recurse2.py
def func():
global x
x += 1
with open('recurse2.py', 'r') as f:
try:
exec(f.read(), {'x': x})
except RecursionError:
print('maximum recursion depth reached at', x)
func()
Можно ли достичь того же эффекта только с одним файлом?
В моей системе это не сбой из-за глубины рекурсии, сбой: OSError: [Errno 24] Слишком много открытых файлов: 'recurse.py' (или IOError в Python 2) - я понимаю, что это разные для каждой системы, но IOError можно предотвратить. – cdlane