python – 捕获greenlets中引发的异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 捕获greenlets中引发的异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2131字,纯文字阅读大概需要4分钟。
内容图文
![python – 捕获greenlets中引发的异常](/upload/InfoBanner/zyjiaocheng/778/3a844b5c85b14375997d2d4a5de3ef9a.jpg)
我正试图捕捉greenlets中提出的异常.根据this tutorial,不幸的是,在Greenlet中提出的例外情况,留在Greenlet内部.在下面的代码中,我有一个同步方法,它产生爬行greenlets.那些爬行greenlets引发HTTPError异常,我需要在同步方法体中捕获.基于异常,在sync方法中,我将设置Account对象的适当状态.任何想法我怎么能在sync方法中捕获greenlets中引发的异常才能实现呢?先感谢您!
# this is standalone helper method
def crawl(item):
try:
item.refresh_children(False) # THROWS HTTPError exception
greenlets = [gevent.spawn_link_exception(crawl, child) for child in item.children]
gevent.joinall(greenlets)
except HTTPError, e:
print e.message
raise e
except (JSONDecodeError, InvalidCredentialsException) as e:
print e.message
raise e
# this is instance method of the Account class
def sync(self):
"Sync search index with data from source"
try:
greenlets = [gevent.spawn_link_exception(crawl, item) for item in self.get_navigation()]
gevent.joinall(greenlets)
self.date_synced = datetime.datetime.now()
self.save()
except HTTPError, e:
if e.status_code == 401:
self.status = 'revoked'
else:
self.status = 'error'
self.save()
except LinkedFailed, e:
print e.message
exception_name = e.message.split()[-1]
if exception_name in ['HTTPError', 'JSONDecodeError']:
self.status = 'error'
self.save()
elif exception_name == 'InvalidCredentialsException':
self.status = 'revoked'
self.save()
解决方法:
Greenlets将保存为greenlet或异常生成的函数的结果(如果已经引发).您可以使用get方法获取结果或重新引发异常.
由于你似乎正在改变基于任何错误的greenlet的状态,所以同步方法最终会看起来像:
def sync(self):
"Sync search index with data from source"
greenlets = [gevent.spawn_link_exception(crawl, item) for item in self.get_navigation()]
gevent.joinall(greenlets)
try:
results = [greenlet.get() for greenlet in greenlets]
except HTTPError, e:
if e.status_code == 401:
self.status = 'revoked'
else:
self.status = 'error'
self.save()
except LinkedFailed, e:
print e.message
exception_name = e.message.split()[-1]
if exception_name in ['HTTPError', 'JSONDecodeError']:
self.status = 'error'
self.save()
elif exception_name == 'InvalidCredentialsException':
self.status = 'revoked'
self.save()
self.date_synced = datetime.datetime.now()
self.save()
内容总结
以上是互联网集市为您收集整理的python – 捕获greenlets中引发的异常全部内容,希望文章能够帮你解决python – 捕获greenlets中引发的异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。