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

doctest中换行符 不生效:如何让多行字符串正常换行显示?

解决Doctest中多行字符串显示转义字符的问题

这个问题我之前也碰到过,doctest的字符串匹配是完全字面量匹配,它不会自动解析字符串里的\n为换行,而是把它当作普通字符显示,所以才会出现你看到的情况。下面给你几个可行的解决方案:

方案1:在Doctest中检查打印输出(最符合你的预期)

既然print能正常显示换行,那直接在doctest里调用print来验证输出就好了。这样doctest会捕获print的实际输出(已经解析了换行),和你写的多行预期对比:

def your_song_format_method(self):
    """
    >>> # 先创建你的类实例并设置测试数据
    >>> class SongCollection:
    ...     def __init__(self):
    ...         self.songs = []
    ...     def your_song_format_method(self):
    ...         song_num=1
    ...         # 注意:这里假设你的result初始值是第一个歌曲,不然会有开头空行
    ...         result = str(self.songs[0])
    ...         for song in self.songs[1:]:
    ...             result+='\n'+str(song_num)+'. '+str(song)
    ...             song_num+=1
    ...         return str(result)
    >>> sc = SongCollection()
    >>> sc.songs = ["CAnadian artist (8:18)", "A, B (3:15)", "AA, BB (5:03)"]
    >>> print(sc.your_song_format_method())
    CAnadian artist (8:18)
    1. A, B (3:15)
    2. AA, BB (5:03)
    """
    # 你的实际代码
    song_num=1
    result = str(self.songs[0])
    for song in self.songs[1:]:
        result+='\n'+str(song_num)+'. '+str(song)
        song_num+=1
    return str(result)

这样运行doctest时,就会和你想要的多行预期完全匹配。

方案2:调整Doctest预期为字符串字面量

如果一定要直接检查函数的返回值,那你需要把预期写成包含转义\n的字符串(注意在docstring里要写\\n,因为docstring会自动解析单个\n为换行):

def your_song_format_method(self):
    """
    >>> sc = SongCollection()
    >>> sc.songs = ["CAnadian artist (8:18)", "A, B (3:15)", "AA, BB (5:03)"]
    >>> sc.your_song_format_method()
    'CAnadian artist (8:18)\\n1. A, B (3:15)\\n2. AA, BB (5:03)'
    """
    # 你的代码

这种方法虽然能通过测试,但可读性不如方案1,毕竟你想要的是直观的多行显示。

额外小提示:优化你的字符串拼接代码

顺便提一句,你的字符串拼接方式可以用更Pythonic的写法,比如用join和生成器表达式,效率更高也更简洁:

def your_song_format_method(self):
    if not self.songs:
        return ""
    # 第一个歌曲直接显示,后面的带编号
    lines = [self.songs[0]] + [f"{i}. {song}" for i, song in enumerate(self.songs[1:], start=1)]
    return '\n'.join(lines)

这样生成的字符串和你原来的逻辑完全一致,但代码更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:31:04