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

如何捕获函数打印内容并执行逻辑,且不修改原函数

解决方法:捕获函数输出并判断,不打印原内容

因为不能修改comparewords.py,我们可以通过临时重定向标准输出的方式,捕获word_compare函数的打印内容,判断后再执行自定义操作,同时不会把原函数的打印内容输出到控制台。

修改后的findtheanagram.py代码:

import sys
from io import StringIO
from comparewords import word_compare

def findanagram(words):
    for i in words:
        for j in words:
            # 跳过自身配对和重复反向配对(比如tar&rat、rat&tar只处理一次)
            if i >= j:
                continue
            # 保存原标准输出,替换为缓冲区
            old_stdout = sys.stdout
            captured_output = StringIO()
            sys.stdout = captured_output
            
            try:
                # 调用目标函数,此时print内容会写入缓冲区
                word_compare(i, j)
            finally:
                # 无论执行是否异常,都恢复原标准输出
                sys.stdout = old_stdout
            
            # 读取捕获的内容并去除首尾空白(包括换行符)
            output_content = captured_output.getvalue().strip()
            # 判断是否是目标输出
            if output_content == 'Anagram':
                # 执行自定义打印操作
                print(f"{i}:{j}")

words = ['tar', 'rat', 'face', 'cafe', 'hello']
findanagram(words)

关键逻辑说明:

  • 捕获输出:用StringIO创建一个内存缓冲区,临时替换系统的stdout,这样word_compare里的print语句会把内容写到这个缓冲区,而不是控制台。
  • 恢复输出:用try...finally保证不管word_compare执行成功还是出错,都能恢复原来的stdout,避免影响后续代码的正常输出。
  • 判断执行:读取缓冲区的内容,判断是否等于'Anagram',是的话执行你需要的打印操作。
  • 优化配对:加入if i >= j跳过重复配对,避免输出重复结果(比如同时输出tar:rat和rat:tar)。

原代码的错误修正:

  • 导入路径错误:原代码from WordCompare应改为from comparewords,对应文件名comparewords.py。
  • 判断条件错误:原代码判断word_compare(i,j) == "Anagrams",但word_compare没有返回值(默认返回None),且原函数打印的是'Anagram'(少了末尾的s)。
  • 变量错误:原代码word[i]应为i,因为i是列表中的元素,不是索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:35:23