Проблема потока управления: функция Python вызвана, но не выполнена - PullRequest
0 голосов
/ 21 июня 2019

У меня самая странная проблема, с которой я когда-либо сталкивался в жизни.

У меня есть часть кода, которая выглядит следующим образом:


class AzureDevOpsServiceError(Exception):
    pass


skip = ["auto"]


def retrieve_results():
    print(variable_not_defined)
    ... # some useful implementation


if not "results" in skip:
    try:
        print("before")
        retrieve_results()
        print("after")
    except AzureDevOpsServiceError as e:
        print(f"Error raised: {e}")

Очевидно, это вызовет ошибкупотому что variable_not_defined, ну, в общем, не определено.

Однако, по некоторым странным причинам, код выполняется правильно и печатает

before
after

Я попытался вызвать функцию с аргументом (retrieve_results(1234)) или добавление аргумента в функцию (def retrieve_results(arg1) и retrieve_results()): обе модификации вызовут исключение, поэтому очевидно, что функция вызывается.

Любой сталкивался с подобной проблемой и знает, чтослучается?

К вашему сведению: на самом деле моя реализация выглядит так:

from azure.devops.exceptions import AzureDevOpsServiceError
import logging


def _retrieve_manual_results(connect: Connectivity, data: DataForPickle) -> None:
    """Retrieve the list of Test Results"""
    print("G" + ggggggggggggggggggggggggggggggggggggg)
    logger = connect.logger

    data.run_in_progress = [165644]

if __name__ == "__main__":
    p = ...
    connect = ...
    data = ...

    if not "results" in p.options.skip:
        try:
            print("........B.........")
            _retrieve_manual_results(connect, data)
            print("........A.........")
        except AzureDevOpsServiceError as e:
            logging.error(f"E004: Error while retrieving Test Results: {e}")
            logging.debug("More details below...", exc_info=True)

1 Ответ

0 голосов
/ 21 июня 2019

Как подчеркнул @gmds, это была проблема с кешем.

Удаление файла .pyc мало что дало.

Однако я нашел решение:

  1. Переименование функции (например, добавление _)
  2. Запуск программы
  3. Переименование назад (то есть удаление _ в предыдущем примере)

Теперь проблема решена.

Если кто-то знает, что происходит за сценой, мне очень интересно.

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