Найти последнюю попытку инструкции перед исключением - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь выяснить, какая была последняя попытка инструкции, которая вызвала исключение, например, Ошибка типа.

Давайте рассмотрим этот пример.

def test(value1, value2):
    print("Hello" + value1 + value2)

Если эта функция вызывается с помощью:

test("World!", 5)
test(5, "World!")

Я получу ошибку TypeError в обоих случаях. Тем не менее, при первом выполнении последний оператор, который будет предпринят (и вызывает ошибку), будет "Hello" + value1. Во втором исполнении это будет "Hello World!" + value2. По крайней мере, я предполагаю, что Python выполняет оба по отдельности, поскольку они являются «вызовами» оператора add?

Хотя сообщение об ошибке будет одинаковым оба раза. Высказывание:

...
    print("Hallo" + value1 + value2)
TypeError: must be str, not int

Могу ли я узнать, какой был последний выполненный оператор, вызвавший ошибку TypeError?

1 Ответ

0 голосов
/ 03 ноября 2018

Вы не можете, если операнды находятся в одной строке (нет понятия «столбец» в трассировках Python). Но вы можете обойти это, разбросав выражение по нескольким строкам:

def test(value1, value2):
    print(("Hello" + value1 +
    value2))

(обратите внимание на добавленные скобки, в которых не следует использовать \ в конце строки)

теперь с test(5, "World!") вы получаете

  File "D:\module2.py", line 2, in test
    print(("Hello" + value1 +
TypeError: Can't convert 'int' object to str implicitly

и с test("World!", 5) вы получите

    test("World!", 5)
  File "D:\module2.py", line 3, in test
    value2))
TypeError: Can't convert 'int' object to str implicitly

Таким образом, в зависимости от ошибки, вы получите строку 2 или строку 3.

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

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