import sys
def worker(a):
try:
return 1 / a
except ZeroDivisionError:
return None
def master():
res = worker(0)
if not res:
print(sys.exc_info())
raise sys.exc_info()[0]
Run Code Online (Sandbox Code Playgroud)
作为上面的代码段,我有一堆函数,比如worker。他们已经有了自己的 try-except 块来处理异常。然后一个主函数将调用每个工人。现在,sys.exc_info() 将所有 None 返回到 3 个元素,如何在 master 函数中重新引发异常?我正在使用 Python 2.7
一个更新:我有 1000 多个工人,有些工人逻辑非常复杂,他们可能同时处理多种类型的异常。所以我的问题是我可以只从 master 提出这些例外而不是编辑作品吗?
这是什么raise
做的,如果它不是内部try
或except
条款,而只是作为函数的最后一条语句?
def foo(self):
try:
# some code that raises an exception
except Exception as e:
pass
# notice that the "raise" is outside
raise
Run Code Online (Sandbox Code Playgroud)
此示例打印1,但不打印2,因此必须是last raise
语句只是引发了最后抛出的异常。
def foo():
try:
raise Exception()
except Exception as e:
pass
print 1
raise
print 2
if __name__ == '__main__':
foo()
Run Code Online (Sandbox Code Playgroud)
有关这种使用方式的任何正式文档?
我想提高我的编码风格的一个更强大的把握try
,except
并raise
在设计API,以及更简洁的代码。
我有嵌套函数,当一个函数捕获到一个 execption 时,我将异常传递给另一个函数,依此类推。
但是像这样,我可以传播对同一错误的多次检查。我指的是:[在python中使用try vs if 来考虑尝试操作的成本。
您将如何在嵌套函数中仅处理一次错误?
例如
f(key)
对键进行一些操作;结果传递给其他函数g()
,h()
f()
,g()
或h()
)。我正在做这样的事情:
def f(key):
try:
#do something
return {'data' : 'data_structure'}
except:
return {'error': 'there is an error'}
@application.route('/')
def api_f(key):
data = f(k)
try:
# do something on data
return jsonify(data)
except:
return jsonify({'error':'error in key'})
Run Code Online (Sandbox Code Playgroud) 我正在学习 python 教程,然后来到了一个介绍错误的部分(熟悉错误,不要在出现问题时感到害怕等)。在深入研究了一些错误之后,我看到了“引发错误”和“引发异常”这两个词。
这是特定功能吗?如果是这样,“引发错误”有什么好处?在可视化这一点时,似乎执行代码时产生的错误在运行时被提升到其他代码之上......有人可以帮我把它拼凑起来吗?
提前致谢!