Как в питоне вернуться на определенную строку

от admin

Как вернуться на определённую строку в коде? python

Как вернуться на определённую строку кода и чтобы при этом не завершался цикл. Без def.

Ответы (2 шт):

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

Это сделано сознательно, чтобы такой возможности не было.

Когда вам это нужно, вам приходит подумать, если вам ясно, что от вашей программы ожидаете. Впервые стратегия, и только после ней тактика.

Например вы при каком-то условии хотите повторить часть с команды print(«2») :

(Команда continue в вашем коде излишня.)

Аналог goto ? Да действительно, встроенных инструментов, полностью реализующих функционал goto , нет (почему так сделано — отдельный вопрос). Однако есть огромное количество идиом, позволяющих частично или полностью эмулировать это.

    ; ;
  • выбор ключа в словаре;
  • динамическое програмирование и т.п.
    ; ;
  • встроенные высокоуровневые функции (модуль itertools ) и т.п.

Есть и другие варианты, более специфичные. Также всегда есть возможность именовать одинаковые участки кода с помощью функций.

Если все-таки нужно написать именно аналог goto , то вот варианты:

  • написать функцию, меняющую байткод функции с goto (а конкретно, добавляющую где надо opcode JUMP_ABSOLUTE );
  • написать свою кодировку с goto , ассоциированный декодер, зарегистрировать его, и писать в начале скрипта #*- coding: my_goto_codec -*- ;
  • написать функцию, наподобие exec , реализующую анализ инструкций вручную.

Как видите, гораздо проще пользоваться встроенными средствами, нежели городить трёхэтажные велосипеды с сомнительной полезностью. Лично я знаю только одну проблему, которую достаточно трудно решить подручными средствами в питоне — break из всех вложенных циклов в самое начало. Пожалуй, это единственное место, где goto был бы полезен.

Как вернуться на определённую строку в коде? python

Как вернуться на определённую строку кода и чтобы при этом не завершался цикл. Без def.

Аналог goto ? Да действительно, встроенных инструментов, полностью реализующих функционал goto , нет (почему так сделано — отдельный вопрос). Однако есть огромное количество идиом, позволяющих частично или полностью эмулировать это.

    ; ;
  • выбор ключа в словаре;
  • динамическое програмирование и т.п.
    ; ;
  • встроенные высокоуровневые функции (модуль itertools ) и т.п.

Есть и другие варианты, более специфичные. Также всегда есть возможность именовать одинаковые участки кода с помощью функций.

Если все-таки нужно написать именно аналог goto , то вот варианты:

  • написать функцию, меняющую байткод функции с goto (а конкретно, добавляющую где надо opcode JUMP_ABSOLUTE );
  • написать свою кодировку с goto , ассоциированный декодер, зарегистрировать его, и писать в начале скрипта #*- coding: my_goto_codec -*- ;
  • написать функцию, наподобие exec , реализующую анализ инструкций вручную.
Читать:
Какой сокет лучше 1155 или 1150

Как видите, гораздо проще пользоваться встроенными средствами, нежели городить трёхэтажные велосипеды с сомнительной полезностью. Лично я знаю только одну проблему, которую достаточно трудно решить подручными средствами в питоне — break из всех вложенных циклов в самое начало. Пожалуй, это единственное место, где goto был бы полезен.

Как перейти к определённой строчке кода в python?

А вообще, надо бы учитывать количество попыток и ловить конкретное, а не общее исключение.

  • Facebook
  • Вконтакте
  • Twitter

Levman5

Zoominger

Сделать можно, но уверены ли вы, что тут нужен именно try/except? Может, проверять условиями корректность работы?

Если б вы скинули код, то можно было бы подсказать.

  • Facebook
  • Вконтакте
  • Twitter

Levman5

У меня есть вот такой код:

И иногда в сайт может зависнуть и я не могу знать где это произойдёт, но перезагрузка помогает

Перейти к определенной строке в Python?

Я хочу перейти к строке 34 в файле .txt и прочитать ее. Как бы вы сделали это на Python?

задан 14 марта ’10, 22:03

Обратите внимание, что если вы следуете одному из многих решений, открывающих ваш файл, вы хотите сделать это с помощью with блок (или try / finally в версии до 2.5), чтобы ваш файл был закрыт. Многие решения могут вызывать исключения, например, если ваш файл неожиданно короче 34 строк. — Mike Graham

stackoverflow.com/questions/620367/… python: как перейти к определенной строке в огромном текстовом файле? — jfs

7 ответы

Используйте стандартную библиотеку Python линейный кэш модуль:

должен делать именно то, что вы хотите. Вам даже не нужно открывать файл — linecache делает все за вас!

ответ дан 15 мар ’10, в 01:03

+1 за красивое элегантное решение, и мы (или, по крайней мере, я) узнали что-то новое. — Джастин Этье

хорошо, но если в других строках требуется другая обработка, открытие файла все равно необходимо. — ghostdog74

@ghostdog, если «обработка» идет на специально пронумерованных строках, просто продолжайте использовать linecache — как следует из названия, он кеширует для вас вещи. Странный микс, когда к некоторым строкам обращаются как пронумерованные, а к другим нужно зацикливаться, можно обращаться по-разному, но такие странные миксы вряд ли являются обычным вариантом использования. — Алекс Мартелли

+1 ты гений Алекс. Я узнаю по крайней мере 2 новые вещи от вас каждый день: D — Пратик Деогаре

Похожие статьи