Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中清除异常状态_Python_Try Except - Fatal编程技术网

如何在Python中清除异常状态

如何在Python中清除异常状态,python,try-except,Python,Try Except,对于API调用,我有一个try/except块。在我看来,一旦我得到一个异常,在该异常之后所有有效的try案例都将看到相同的异常。我能够让它工作的唯一方法是重新启动我的Python脚本。我在谷歌上搜索了一下,找到了PyErr_clear(),但这是针对C-API的。我可以从普通的老Python调用一些东西来清除异常状态吗 以下是我所做工作的基本理念: def get_and_print_data(key): try: data = get_data_from_some_3rd_

对于API调用,我有一个try/except块。在我看来,一旦我得到一个异常,在该异常之后所有有效的try案例都将看到相同的异常。我能够让它工作的唯一方法是重新启动我的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.

作为我认为第三方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案例都会看到相同的异常”是什么意思。如果没有代码,这个问题就没有意义了。这不是python的一个特性,这是您在代码中实现的东西,它似乎是从某个第三方api(key)获取数据(key)在接收到无效密钥后失败的问题。我不指望你的try/except会有这种行为。@Jenner Felton-我在想,也许第三方api中的某些东西需要清除,也许就是这样;但后来我看到这似乎表明,一旦设置,异常状态将保持设置状态,直到清除。我已经联系了API的所有者,但我想我也会在这里尝试(在等待响应时),以防这是一种语言功能(我是C/C++程序员,对Python不熟悉)。我可以问一下您使用的是哪种第三方API吗?我确信这是个问题,谢谢。运行它。这很有说服力。我想我必须等待第三方的回复。@DanielGoldfarb第三方是一个带文档的开源API吗?如果是的话,我很乐意帮忙。我解决了这个问题,多亏了你的证明,这个问题肯定不是Python的问题。我调用的api是来自alpha_vantage()的get_daily(),alpha_vantage()是围绕web api的Python包装器。问题是免费版本的web API限制为每分钟5个请求;Python包装器默认在失败时重试5次,因此当发送一个无效密钥时,它每分钟烧掉我的5个请求。当我将重试次数设置为0时,一切正常。谢谢你的帮助@DanielGoldfarb很好的侦察,恭喜你解决了你的问题!很高兴你明白了!尽管您责怪第三方,但如果您只是使用python的普通旧C绑定,也会发生这种情况。调用PyErr_Clear()似乎实际上并没有清除错误。正在调查。