繁体   English   中英

捕获Firebase 503错误异常未捕获我的try语句

[英]Catch Firebase 503 error exception not caught my try statement

我正在使用Firebase实时数据库侦听器来侦听数据库路径上的更改。

我的程序最近崩溃了,原因是底层requests库似乎引发了以下503错误:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/threading.py", line 917, in _bootstrap_inner
    self.run()
  File "/usr/local/lib/python3.7/threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/lib/python3.7/site-packages/firebase_admin/db.py", line 123, in _start_listen
    for sse_event in self._sse:
  File "/usr/local/lib/python3.7/site-packages/firebase_admin/_sseclient.py", line 128, in __next__
    self._connect()
  File "/usr/local/lib/python3.7/site-packages/firebase_admin/_sseclient.py", line 112, in _connect
    self.resp.raise_for_status()
  File "/usr/local/lib/python3.7/site-packages/requests/models.py", line 940, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 503 Server Error: Service Unavailable for url: https://database_url...

我的侦听器初始化包含在try语句中,所以我不确定为什么没有按我期望的那样捕获,吞咽和重试它:

def init_listener():
    try:        
        listener = firebase_admin.db.reference(db_path).listen(handle_change)

    except Exception as e:
        time.sleep(1)  # Retry in one second.
        init_listener()

我想处理将来的503错误,但不确定如何执行此操作。

此外,我使用except Exception as e上面演示/调试的目的,但我也不能肯定是否requests.exceptions.HTTPError会非常具体,只捕获500错误(虽然我不知道还有什么其他错误可能被提高)。

firebase_admin参考文档

该API基于Firebase REST API中可用的事件流支持。 每次调用listen()都会启动一个新的HTTP连接和一个后台线程。 这是一项实验功能。

这里的关键是所有这些都在后台线程中运行。 因此,将对listen()的调用包装在try/except中将不会捕获线程中引发的异常。 没有简单的方法来捕获在后台线程中发生的异常。

为了解决您的问题,您可能需要更多地了解为什么数据库返回HTTP 503状态。 或者,您将需要切换到其他一些firebase_admin API,使您可以捕获并忽略这些异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM