使用assert测试is_valid_date函数时遭遇语法错误及疑问
解决assert语法错误及用法疑惑
嘿,我来帮你理清这个问题~
首先,你遇到的语法错误根源是:assert是Python里的语句,不是可以被调用的函数,所以你不能把它放在print后面当参数使用,print assert(...)这种写法本身就不符合Python的语法规则。
然后说说你对assert的疑惑:即使is_valid_date返回True,assert也不会“返回True”给print——因为它根本不是函数,没有返回值。assert的工作逻辑是这样的:
- 当你写
assert 条件时,如果条件为True,程序会默默继续执行,不会有任何输出或返回值; - 只有当条件为False时,它才会抛出
AssertionError异常,用来提醒你“预期的条件不成立”。
那怎么正确实现你的测试需求呢?分两种情况:
情况1:只想验证日期有效性(不符合就报错)
直接单独用assert语句就行,不需要print:
# 测试2014年4月4日和2012年1月3日的is_valid_date assert is_valid_date(2014, 4, 4) assert is_valid_date(2012, 1, 3)
(这里的括号可以省略,因为assert是语句不是函数,加括号也不影响,但没必要)
情况2:想打印出验证的结果(不管对错都显示)
那直接调用函数并打印返回值就好,不需要用assert:
# 测试2014年4月4日和2012年1月3日的is_valid_date print(is_valid_date(2014, 4, 4)) print(is_valid_date(2012, 1, 3))
这样当is_valid_date返回True时,就会在控制台打印出True啦。
另外看了你写的is_valid_date函数,逻辑是没问题的:先判断年份在datetime的有效范围内,再检查月份1-12,最后验证天数不超过当月的最大天数,符合条件就返回True,否则返回False。只要days_in_month函数的逻辑正确,那这些测试用例应该都会返回True的。
内容的提问来源于stack exchange,提问作者charlie
相关产品推荐
相关产品推荐

