【问题标题】:How to assert if method doesnt have return statement without calling it in python如何断言如果方法没有返回语句而不在python中调用它
【发布时间】:2021-11-28 12:23:13
【问题描述】:

有没有办法断言一个方法有一个返回语句? 例如,如果我有这个类:

class class1():
    def __init__(self):
        pass
    def method1(self):
        return 0
    def method2(self):
        raise NotImplementedError

当我从它object1=class1() 创建对象时,我想something(object1.method2) == False 检查它是否有返回语句。 assert(something(object1.method1)) 不应该返回断言错误,而 method2 应该。

正在使用hasatrr()callable(),但它仍然为method2 返回True

【问题讨论】:

  • 所有 Python 函数都会返回一些东西,除非它们引发异常,即使返回是隐式的(无)
  • 是否可以在不调用函数的情况下检查返回是否为 None ? @BrutusForcus

标签: python python-3.x methods assert


【解决方案1】:

您可以使用inspect模块获取函数的定义,并检查函数是否包含单词return

from inspect import getsourcelines

def has_return(func):
    lines, _ = getsourcelines(func)
    return any(line.lstrip().startswith("return ") for line in lines) 

print(has_return(class1.method2)) # False
print(has_return(class1.method1)) # True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 2013-08-03
    相关资源
    最近更新 更多