如何清除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
在本地尝试运行,您应该会看到后续的有效密钥仍然有效。
我有一个 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
在本地尝试运行,您应该会看到后续的有效密钥仍然有效。