如何在Python中为多个函数重用异常处理代码?
如何在Python中为多个函数重用异常处理代码 我正在从事一个将使用Stripe Python库的项目。 这是他们文档中的一些示例代码如何在Python中为多个函数重用异常处理代码?,python,function,exception,exception-handling,flask,Python,Function,Exception,Exception Handling,Flask,如何在Python中为多个函数重用异常处理代码 我正在从事一个将使用Stripe Python库的项目。 这是他们文档中的一些示例代码 try: # Use Stripe's bindings... pass except stripe.error.CardError, e: # Since it's a decline, stripe.error.CardError will be caught body = e.json_body err = body['error'
try:
# Use Stripe's bindings...
pass
except stripe.error.CardError, e:
# Since it's a decline, stripe.error.CardError will be caught
body = e.json_body
err = body['error']
print "Status is: %s" % e.http_status
print "Type is: %s" % err['type']
print "Code is: %s" % err['code']
# param is '' in this case
print "Param is: %s" % err['param']
print "Message is: %s" % err['message']
except stripe.error.InvalidRequestError, e:
# Invalid parameters were supplied to Stripe's API
pass
except stripe.error.AuthenticationError, e:
# Authentication with Stripe's API failed
# (maybe you changed API keys recently)
pass
except stripe.error.APIConnectionError, e:
# Network communication with Stripe failed
pass
except stripe.error.StripeError, e:
# Display a very generic error to the user, and maybe send
# yourself an email
pass
except Exception, e:
# Something else happened, completely unrelated to Stripe
pass
我需要编写几个函数来执行条带系统中的各种调用,以处理我的事务。例如检索令牌、创建客户、向卡收费等。我是否必须在每个函数中重复try/except代码,或者是否有方法使try块的内容动态化
我想在我的Flask view代码中使用这些不同的函数作为条件,这样如果我能从它们中得到一条错误/成功消息,那也会很有帮助。编写一个decorator,在try块中调用修饰视图并处理任何与条带相关的异常
from functools import wraps
def handle_stripe(f):
@wraps(f)
def decorated(*args, **kwargs):
try:
return f(*args, **kwargs)
except MyStripeException as e:
return my_exception_response
except OtherStripeException as e:
return other_response
return decorated
@app.route('/my_stripe_route')
@handle_stripe
def my_stripe_route():
do_stripe_stuff()
return my_response
您考虑过装饰器吗?如果您不希望异常处理应用于整个函数,这里也可以使用上下文管理器。