断言语法

2024-09-30 10:32:57 发布

您现在位置:Python中文网/ 问答频道 /正文

正在获取试图使用assert进行测试的下一行的语法错误。在

#test is_valid_date for April 4, 2014 and Januarary 3, 2012
print assert(is_valid_date(2014,4,4))
print assert(is_valid_date(2012,1,3))

如果函数is_valid_date返回true,那么assert不应该返回true吗?在

这是实际的is_valid_date实现。在

^{pr2}$

Tags: and函数testtruefordateisassert
2条回答

assert不是函数,而是一个语句,因此不能在print的表达式中使用。

你可能想做的是:

is_valid = is_valid_date(2014, 4, 4)
print is_valid
assert is_valid

也就是说,首先执行print语句,然后执行assert语句(不过,对于只返回True或False的函数,在断言之前打印返回值没有多大好处)。

如果您经常这样编写代码,可以考虑编写自己的实用程序函数:

^{pr2}$

或者像这样:

def assert_is_valid_date(*args):
    is_valid = is_valid_date(*args)
    print is_valid
    assert is_valid
assert_is_valid_date(2014, 4, 4)

您希望assert返回什么?为什么要print该值?你的用法不太地道。取出print,并在assert中添加一个您正在测试的东西的描述,作为它的第二个参数。

assert is_valid_date(2014,4,4), "2014,4,4 is a valid date tuple"
assert is_valid_date(2012,1,3), "2012,1,3 is a valid date tuple"

切题地说,也许你想重构你的函数来避免arrow antipattern

^{pr2}$

这可能有些过头了,但您会注意到添加新条件现在很容易,添加调试打印以查看代码拒绝输入的位置现在非常简单。

相关问题 更多 >

    热门问题