Python 检查函数是否有 return 语句

2024-02-06

E.g.

def f1():
    return 1

def f2():
    return None

def f3():
    print("Hello")

功能f1() and f2()返回一些东西但是f3() not.

a = f2()
b = f3()

和这里a equals b所以我不能只比较函数的结果来检查是否有return or not.


我喜欢 @st0le 检查源代码的想法,但您可以更进一步,将源代码解析为源代码树,这消除了误报的可能性。

import ast
import inspect

def contains_explicit_return(f):
    return any(isinstance(node, ast.Return) for node in ast.walk(ast.parse(inspect.getsource(f))))

def f1():
    return 1

def f2():
    return None

def f3():
    print("return")

for f in (f1, f2, f3):
    print(f, contains_explicit_return(f))

Result:

<function f1 at 0x01D151E0> True
<function f2 at 0x01D15AE0> True
<function f3 at 0x0386E108> False

当然,这只适用于以下功能have源代码是用 Python 编写的,但并非所有函数都是如此。例如,contains_explicit_return(math.sqrt)会给你一个类型错误。

此外,这不会告诉您任何有关函数的任何特定执行是否命中 return 语句的信息。考虑以下功能:

def f():
    if random.choice((True, False)):
        return 1

def g():
    if False:
        return 1

contains_explicit_return会给True在这两方面,尽管f一半的执行没有遇到返回,并且g没有遇到返回ever.

最后,它不会区分函数是否有 return 语句或内部定义的函数是否有 return 语句:

def f():
    def g():
        return 5

在这种情况下,contains_explicit_return(f)将返回True, 虽然f永远不会返回任何东西,因为该函数ginside 包含显式返回。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 检查函数是否有 return 语句 的相关文章

随机推荐

  • 在自定义行为上绑定依赖属性时出错

    我正在探索 Silverlight 附加行为机制 以便在我的 Silverlight 应用程序中使用模型 视图 视图模型模式 首先 我试图让一个简单的 Hello World 工作 但我完全陷入了一个错误 无法找到解决方案 我现在拥有的是一
  • 如何计算图像是横向还是纵向

    我正在使用 jquery 创建一个图片库 有没有可能使用jquery计算图像是横向还是纵向 感谢您的支持 您可以简单地比较图像的宽度和高度 var someImg someId if someImg width gt someImg hei
  • 将类的序列化放入DLL中

    我正在寻找一个 工作 示例 用于在 DLL 中外部序列化类结构 目前我找不到任何例子 Boost 文档只是说明一些宏 论坛和新闻组只是讨论具体问题及其解决方案 所以我要求提供一个 外部 序列化类结构的示例 如下所示 除了类代码之外 我还添加
  • OSX 安装 Rsymphony - 链接标头和库

    symphony 已在终端中正确安装和测试 当尝试从源代码安装 Rsymphony 时 R 抱怨缺少标头和库 非常感谢任何指点 谢谢你 symphony安装目录 Users timo Applications symphony R安装命令
  • 使用 php str_getcsv 函数将 csv 文件数据转换为数组

    我有类似使用创建的字符串fputcsv http php net manual en function fputcsv php Date Name Hours 2013 01 02 Test User 7 59 2013 01 03 Tes
  • 将条件的“Future”更改为静态类型“bool”

    这个问题真的非常相似this one https stackoverflow com questions 54691370 flutter returning a bool type from a futurebool method 我已遵
  • 如何在 Zend Framework 2 中创建通用模块/控制器/操作路由?

    我想在 Zend Framework 2 中创建一个通用模块 控制器 操作路由 以便与 ZF2 MVC 架构一起使用 在 ZF1 中 默认路由的定义如下 module controller action 其中模块默认为default 控制器
  • 为什么我的数组中的指针指向同一个字符串?

    我试图理解为什么会出现问题 我有一个文件 我从中读取了几行 char array slave 128 int i 0 while read getline line len fp 1 if strstr line X NULL array
  • PostgreSQL 自动增量在每次更新时增加

    每次我执行 INSERT 或 UPSERT 发生冲突更新时 时 每个表上的增量列都会按之前的更新数量递增 例如 如果我有这张表 id int4 title text description text updated at timestamp
  • iPhone 上的 adhoc 应用程序安装失败,为什么?

    我正在开发一个 iPhone 应用程序 由于应用程序具有位置感知功能 因此我正在不同的地方 我不在场的地方 对其进行测试 为此 我向我的朋友发送了 mobileprovision 配置文件和应用程序临时构建 但最后应用程序安装停止在中间 在
  • TypeScript 依赖的字符串文字属性和索引

    如同Typescript 属性的类型依赖于同一对象中的另一个属性 https stackoverflow com questions 56949513 typescript type of a property dependent on a
  • 无法找到类“com.sun.facelets.FaceletViewHandler”

    我有 Richfaces 应用程序 我将其部署到 Glassfish v3 许多周 几乎 一切正常 但今天突然出现以下错误 我的 pom xml 中有 jsf facelets 1 1 14 jar 依赖项 我不知道如何解决这个问题 帮助
  • 如何运行Titanium生成的Xcode项目?

    我确信以前可以做到这一点 但我似乎无法在 Xcode 中运行 Titanium 生成的 Xcode 项目 该应用程序安装在模拟器中并启动 但立即停止 并出现以下运行时错误 Could not find the file app js 我正在
  • 清除帐户删除数据

    我想当用户手动从应用程序中删除帐户时清除应用程序的数据Accounts sync设置应用程序中的部分 我有自己的实现AbstractAccountAuthenticator但没有方法可以挂钩删除帐户过程 有什么提示吗 我一直在思考同样的问题
  • Magento 更改 div 的下拉可配置产品选项

    我需要将可配置产品的选项显示为内部带有 a 的 div 让用户在选项中单击并选择它 而不是下拉列表 就像菜单 目标是显示鞋子尺码 正如许多人所知 Magento 使用 Json 响应来填充下拉菜单的选项 var spConfig new P
  • NSDecimalNumber DecimalNumberWithString:忽略当前区域设置

    根据文档 NSDecimalNumber decimalNumberWithString 应该使用区域小数分隔符 NSDecimalSeparator 是否是句点 例如所使用的 在美国 或逗号 例如在法国使用的 取决于默认区域设置 但是当我
  • 无法启动监控且无法运行程序。为什么?

    我上周重新安装了Windows 7并解压了Eclipse并再次重新安装了SDK 但我没有在Eclipse中运行该程序 当我将 Galaxy 手机连接到计算机时 Eclipse 显示错误并频繁在控制台选项卡中写入Failed to start
  • 具有溢出的元素:受浮动元素影响的自动

    有人可以向我解释一下为什么溢出有以下效果吗 在下面的 jsfiddle 中 我有一个浮动到左侧的 Div 并设置了宽度和高度 接下来我有一个内容 div 您可以将其视为左侧导航和网站布局的内容 在内容中 我有两个相同的 Div 除了一个具有
  • PyInstaller 新手:你好世界

    我正在尝试使用 PyInstaller v2 1 从简单的 hello world 脚本 Python 2 7 创建单个可执行文件 脚本 hello py 只有一行 print Hello World 然后 我在包含脚本的文件夹中打开一个命
  • Python 检查函数是否有 return 语句

    E g def f1 return 1 def f2 return None def f3 print Hello 功能f1 and f2 返回一些东西但是f3 not a f2 b f3 和这里a equals b所以我不能只比较函数的结