You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类中checkArtist方法返回None导致assert断言失败问题排查

问题分析与修复:Song类方法返回None导致断言失败

嘿,我一眼就看出问题出在哪啦!你的checkArtist方法犯了一个很常见的小错误——没有返回计算结果。

在Python里,任何函数或方法如果没有写显式的return语句,执行完后都会默认返回None。你在方法里确实写了判断逻辑:

any(artistname in self._artist for artistname in self._name)

这行代码会正确计算出布尔值True或False,但你没有把这个值返回出去,所以调用song1.checkArtist(...)的时候拿到的都是None,自然会导致断言失败。

而你在类外单独运行逻辑时,直接执行了这个表达式,所以能看到正确的结果——但放到类方法里就必须用return把结果传递出来才行。

修正后的代码

只需要给checkArtist方法加一个return关键字,把any()的结果返回即可:

class Song:
    def __init__(self, artist, title):
        self._artist = artist
        self._title = title
    def checkArtist(self, name):
        self._name = name.split() # split to list since just a first name or last name is allowed
        # 关键:添加return返回计算结果
        return any(artistname in self._artist for artistname in self._name)
def main_program():
    song1 = Song("Lady Gaga and Bradley Cooper", "Shallow")
    # 现在这两个断言都能正常通过了
    assert(song1.checkArtist("Lady Gaga and Bradley Cooper"))
    assert(song1.checkArtist("Lord Gaga"))
main_program()

额外优化建议

其实你不需要把name.split()的结果存到实例属性self._name里,这只是方法内部的临时变量,用局部变量更符合类的封装原则,修改后代码更干净:

def checkArtist(self, name):
    name_parts = name.split()
    return any(part in self._artist for part in name_parts)

这样修改后,你的两个测试用例都会正常返回True,断言也就不会再失败啦。

内容的提问来源于stack exchange,提问作者torkestativ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:37:52