Перезапуск Python для цикла

#python

#python

Вопрос:

У меня есть этот скрипт:

 from sys import argv
from tokens import Token
from os import system

file = open(argv[1], "r")
script = file.readlines()
lines = script

file.close()

for index, line in enumerate(lines):
    if line[:8] == Token.INCLUDE:
        system("python3 {} {}".format(argv[0], argv[1]))

        del lines[index]
        restart_loop() # Code block to restart the loop
 

и как я могу перезапустить цикл for. (Дополнительная информация: токен.ВКЛЮЧИТЬ = « %include «)

Комментарии:

1. Зачем ты звонишь del lines[index] ?

2. Чтобы удалить элемент index th из lines списка

3. если вы удалите строки, которые удовлетворяют вашему условию, какой смысл снова запускать цикл?

4. для интерпретации других строк входного скрипта

5. Дело в том, что вы действительно не хотите изменять список по мере его прохождения. Существует множество вопросов по stackoverflow, которые объясняют, как это приводит к неожиданному и нежелательному поведению. С большим контекстом, я обещаю вам, люди здесь могут предложить более простой способ достижения ваших целей

Ответ №1:

Перезапуская цикл, я предполагаю, что вы имеете в виду вызвать его снова

самый простой способ сделать это — сделать его рекурсивной функцией

 def fn(): 
     for index, line in enumerate(lines):
         if line[:8] == Token.INCLUDE:
             system("python3 {} {}".format(argv[0], argv[1]))

             del lines[index]
     #make sure to add your conditions else it will go into an infinite loop. 
     fn()
 

Комментарии:

1. Я отредактировал его, можете ли вы еще раз проверить, что вы ответили верно?

2. да, похоже, что вы пытаетесь вызвать рекурсивную функцию, попробуйте фрагмент кода, на который я ответил, он должен работать, все, что вам нужно сделать, это заменить ur на for цикл и вызвать функцию

3. @maDeveloper Я не голосовал против, но в вашем вопросе не хватает подробностей и контекста. Кроме того, ваш пример кода недоступен для выполнения, и вы не показываете даже образец содержимого файла. Таким образом, люди, которые отвечают на вопросы, должны делать много догадок

4. Голоса против были, поскольку заданный вопрос не был правильно сформулирован, и аналогичные вопросы задавались ранее, это часто случается @maDeveloper я получил тонны голосов против

5. Хм, я понял, спасибо, в любом случае, я попробую ваш ответ