如何清除Python中的异常状态

How to clear the exception state in Python

我有一个 try/except 块围绕对 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.

举例说明为什么我认为是第 3 方 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

在本地尝试运行,您应该会看到后续的有效密钥仍然有效。