Как очистить состояние исключения в Python - PullRequest
0 голосов
/ 05 октября 2018

У меня есть блок try / исключением вокруг вызова API.Мне кажется, что как только я получу исключение, все действительные примеры попыток после этого исключения увидят одно и то же исключение.Единственный способ заставить его работать - это перезапустить мой скрипт на Python.Я погуглил и нашел PyErr_clear (), но это для C-API.Есть ли что-то, что я могу вызвать из простого старого Python, который очистит состояние исключения?

Вот основная идея того, что я делаю:

def get_and_print_data(key):
   try:
      data = get_data_from_some_3rd_party_api(key)
   except Exception as ex:
      print("Failed to get data for",key,": ",str(ex))
      return

   print("data=",data)

Тогда в основном у меня есть

get_and_print_data("Valid Key")     ## This works
get_and_print_data("INvalid Key")   ## This gets exception, as expected
get_and_print_data("Valid Key")     ## This and all subsequent calls to get_and_print_data() fail with the same exception.

1 Ответ

0 голосов
/ 05 октября 2018

В качестве примера того, почему я думаю, что у стороннего API возникают проблемы:

def get_data_from_some_3rd_party_api(key):
    if key == "Valid Key":
        return "This is some good data."
    else:
        raise ValueError("Invalid Key")

def get_and_print_data(key):
   try:
      data = get_data_from_some_3rd_party_api(key)
   except Exception as ex:
      print("Failed to get data for",key,": ",str(ex))
      return
   print("data=",data)

get_and_print_data("Valid Key")     ## This works
get_and_print_data("INvalid Key")   ## This gets exception, as expected
get_and_print_data("Valid Key")     ## This works

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

...