python - 忘记从函数返回结果 : how to prevent this bug?

标签 python coding-style python-3.x static-analysis

我有时会忘记从函数中返回结果:

def f(*args):
  # do stuff
  result = # an expression
  # oops forgot to return result

因为 None 在我的应用程序中是一个有效值,所以这不会引发任何异常,甚至不会在调用者中引发任何警报。当然,我正在努力小心。但我想知道是否有一些巧妙的方法可以警告我任何未明确返回值的函数。

也许是一个正则表达式,我可以运行我的代码来查找此类情况。或者一些代码检查工具(希望能在Windows环境下使用)。

我什至在考虑使用这样的装饰器:

def requires_return(func):
  def new_func(*args, **kwargs):
    result = func(*args, **kwargs)
    if result is None:
      print('Warning: {} may be missing a return statement'.format(func.__name__))
    return result

但这行不通,因为:

  1. 许多误报:每次函数实际返回 None。我不能停止在我的应用程序中使用 None 而不在其他地方创建非常丑陋的代码。

  2. 无论如何,为每个函数添加一个装饰器看起来 super 丑陋。

请注意,我确实有一些函数,但我故意没有 return 语句。我倾向于保持一定的命名约定,这让我很容易区分它们。 (具体来说,每个以 get_ 开头的函数都必须有一个 return 语句。)

最佳答案

我建议不要养成这样做的习惯

def something():
    ...
    result = ...
    return result

只是做:

def something():
    ...
    return ...

除此之外,默认情况下返回 None 在 99% 的情况下都是有用的功能。

关于python - 忘记从函数返回结果 : how to prevent this bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10067185/

相关文章:

python - 按组填充数据框中的所有变量

Python 服务器 : Chrome Extension SSL certificate

coding-style - 在 Python 代码中使用名称 "function"作为变量

python - 如果位置存在于范围内,则按行索引填充每列​​的数据帧值

python - 如何更改 tkinter 文本小部件中某些单词的颜色?

java - 如何强制 Eclipse 换行?

html - 对 HTML 属性使用单引号是否正确?

python - 我应该使用什么 gstreamer 管道?

python - 从元组中删除空格分隔符

python - Google App Engine 开发应用程序服务器不显示详细的错误消息