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

如何减少方法重复参数并解决调用时返回空列表问题

问题解决:消除参数重复传递+修复空列表返回问题

一、先修复空列表的核心bug

你在filter_verdi_total_fruit_cost里犯了一个关键错误:代码里遍历的是file_name.split('\n'),但file_name是文件名,不是从文件提取的文本内容!这就是为什么单独调用该方法时(大概率你误传了提取后的文本当参数)能得到结果,但在show_extracted_data_from_file里传真实文件名时返回空列表。

另外,这个方法里重复调用了extract_text_from_image(file_name)完全没必要——show_extracted_data_from_file已经调用过一次文本提取,重复调用既浪费资源,还可能导致状态混乱。

修改后的filter_verdi_total_fruit_cost代码:

def filter_verdi_total_fruit_cost(self):
    locale.setlocale(locale.LC_ALL, locale='Dutch')
    # 直接用extractingText已经提取好的文本,无需重复调用提取方法
    return [
        locale.atof(items[-1]) for items in (
            token.split() for token in self.extractingText.extracted_text.split('\n')
        ) if len(items) > 2 and items[1] in self.extractingText.list_fruit
    ]

注:这里假设ExtractingTextFromFile类的extract_text_from_image方法会把提取到的文本存储到实例属性extracted_text中,如果你的类是其他命名方式,替换成对应存储提取结果的属性即可。

二、消除file_name参数的重复传递

核心思路是:在show_extracted_data_from_file中仅传入一次file_name并完成文本提取,后续所有内部方法直接使用实例中存储的提取结果,不再需要传递file_name参数。

修改后的完整代码示例

def show_extracted_data_from_file(self, file_name):
    # 仅调用一次文本提取,结果存入extractingText实例
    self.extractingText.extract_text_from_image(file_name)
    total_fruit = self.filter_verdi_total_number_fruit()
    fruit_name = self.filter_verdi_fruit_name()
    # 不再传递file_name参数
    fruit_total_cost = self.filter_verdi_total_fruit_cost()

    return "\n".join("{} \t {} \t {}".format(a, b, c) for a, b, c in zip(total_fruit, fruit_name, fruit_total_cost))

def filter_verdi_total_fruit_cost(self):
    locale.setlocale(locale.LC_ALL, locale='Dutch')
    extracted_text = self.extractingText.extracted_text
    return [
        locale.atof(items[-1]) for items in (
            token.split() for token in extracted_text.split('\n')
        ) if len(items) > 2 and items[1] in self.extractingText.list_fruit
    ]

额外优化建议

  • 确认ExtractingTextFromFile类的extract_text_from_image方法正确存储提取结果到实例属性,这是所有内部方法共享数据的基础。
  • 把locale.setlocale移到类的__init__方法中执行,避免每次调用filter_verdi_total_fruit_cost都重复执行。
  • 检查filter_verdi_total_number_fruit和filter_verdi_fruit_name方法,确保它们也是使用extractingText中已提取的文本,而非依赖外部传参。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:20:38