python-decorators - Python 在使用装饰器时在关闭时返回 None
问题描述
问题是如果第二个数字不为零,则内部函数返回 None 而不是产生输出!
为什么它不能充当普通的装饰器?
代码:
def check(fun):
def inner_fun(a,b):
if b == 0:
print("0 is not valid")
return
fun(a,b)
return inner_fun #returns None
def divide(a,b):
return a / b
divide = check(divide)
print(divide(5, 0))
输出:
0 is not valid
None
解决方案
内部函数不会返回您期望的值,因为......它没有return
。相反,它隐式返回 None,就像 Python 函数在到达控制流结束时所做的那样。
您可以编辑内部函数以f(a, b)
在正常情况下返回:
def check(fun):
def inner_fun(a,b):
if b == 0:
print("0 is not valid")
return # implicitly returns None
return fun(a,b) # note return
return inner_fun
推荐阅读
- c# - .NET Core 2 构建在 .NET Core 3.1 中不起作用
- javascript - 使用 beforeProcessing 或 beforeRequest 事件显示消息
- powerbuilder - 如何使用快捷栏和 xplistbar 创建用户访问权限
- javascript - Javascript / TypeScript 订阅中使用 Promise 时的潜在竞争条件
- c# - EF Core 5:使用与 FK 相同的 PK 配置拥有的类型且没有父属性
- jekyll - 仅在第一次运行时调用 Jekyll 生成器插件,而不是在重新生成时调用
- javascript - Fabric JS - 使用 JSON diff 进行 UNDO 和 REDO 优化
- reactjs - Next.js:在单击提交按钮之前提交表单
- flutter - 在 Flutter Web 中使用实时数据库模拟器
- python - python中不同颜色的簇的图