gpt4 book ai didi

python - 如何捕获所有错误并引用抛出的内容?

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:03 24 4
gpt4 key购买 nike

我读过这篇文章 http://docs.python.org/2/tutorial/errors.html两次以确保。它完全避开了这个话题。

  1. 我试过抛出一些不是 ExceptionExceptionBase 的东西,解释器告诉我我只能抛出 ExceptionBase-esque 和旧式类的对象。
  2. 所以我尝试抛出旧式类的对象:

>>> class Foo():
... pass
...
>>> try:
... raise Foo()
... except Exception as foo:
... print 'foo %s' % foo
... except:
... print 'not an exception'
... else:
... print 'it\'s all good'
...
not an exception
>>>

惊奇...那么,我如何捕获所有它们并检查捕获的内容?

编辑:

动机。

  1. 过度防御性编码从来都不是坏习惯。假设我正在编写一个后台程序,为什么我不通过做一些按照其他标准微不足道的事情来尽可能多地防止潜在危险?
  2. 程序并不总是在友好的环境中运行,有时其他程序会尝试破坏您的程序,在这种情况下您确实需要防止各种错误。有时这是有道理的。想一想,例如 CGI 实现 - 如果某个租用其中一部分的白痴在其中放置了一个脚本,从而引发了这个“意外”错误,您是否希望整个服务器宕机?
  3. 一些框架已经为您捕获了所有错误,因此从框架代码层下获取您的消息并不容易。抛出框架代码未捕捉到的东西可能是绕过它的好策略(这不仅仅是一个理论案例,我之前做过)。

最佳答案

import types

try:
raise Foo()
except (Exception, types.InstanceType) as foo:
print 'foo %s' % foo
else:
print 'it\'s all good'

编辑:

虽然这感觉应该有效,但事实并非如此。这是一个 hacky 方法:

import sys

try:
raise Foo()
except:
etype, foo, traceback = sys.exc_info()
print 'foo %s' % foo
else:
print 'it\'s all good'

关于python - 如何捕获所有错误并引用抛出的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13316540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com