Могу ли я автоматизировать повторное выполнение кода, если возникла ошибка? - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть программа, содержащая несколько файлов .py в одной папке; Я выполняю его, запустив один конкретный файл в моей IDE, Pycharm. (Файл, назовем его A.py, вызывает определенный метод main(), определенный в нем, поэтому запуск файла означает просто запуск этого метода.) Это часть текущих исследований, и даже в лучшем случае это занимает много времени. время для завершения из-за сложности вычислений, поэтому в идеале я бы просто нажал "выполнить", сделать что-то еще и проверить позже.

Однако есть проблема:

  • поведение программы зависит от реакции удаленного сервера на запрос;
  • иногда (все чаще в последние несколько дней) это приводит к SSLError и коду выхода 1;
  • и для целей этого вопроса мы предположим, что я не могу устранить эту неустойчивую проблему с изменениями в моем собственном коде.

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

Было бы что-то вроде этого во втором файле, если вы простите псевдокод:

from a import main

numtries, maxtries = 0, 10

while numtries < maxtries:

    ec = exitcode(main)

    if ec != 0: numtries += 1

Можно ли что-то подобное сделать?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

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

retries = 0
while retries > limit:
    try:
        A.main()
    except SSLError:
        retries += 1

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

0 голосов
/ 27 апреля 2018

Это интересный вопрос, так как вы описываете не-модульный тест (так как может быть зависимость SSL), поскольку ваш код требует зависимостей вне вашего контроля.

Можете ли вы переписать свои юнит-тесты, чтобы охватить только тот код, который вы можете непосредственно контролировать? Затем переместите SSL-типы в стратегию тестирования на основе более высоких модулей.

Что касается псевдокода .... Если вы чувствуете, что 3 взломали какую-то функцию, прежде чем получите правильный ответ (вы ведь попробуете SSLException, не так ли?), Тогда продолжайте ... .... 1005 *

Но почему отказывает SSL? а ваше программное обеспечение не справится с этим?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...