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

使用re.sub时报TypeError: 'list'对象无法被解析为整数如何解决?

问题根因

re.sub(pattern, repl, string) 要求第三个入参必须是单个字符串,你传入的Menu_choices是random.sample()返回的列表,类型不匹配才会抛出TypeError,和该方法的返回值无关。同时你原本写的正则规则也不符合「去掉行前半部分」的需求,r'.*?'是非贪婪匹配,最短匹配结果为空,替换成'I'的话只会给所有字符前插入'I',达不到剔除内容的效果。

修正方案

你只需要遍历Menu_choices的每个元素,逐行做正则替换再写入购物清单文件即可,不需要更换实现思路。另外建议用with关键字管理文件句柄,不用手动调用close(),也能避免你原代码中MyFile.close漏写括号导致文件没有正常关闭的问题。

修正后代码示例:

import random
import re

# 此处默认你已提前正确加载sample_list,每条数据结构示例:「菜名: 原料1,原料2,原料3」
Menu_choices = random.sample(sample_list, k=6)

# 写入菜单输出文件
with open('MenuOutput.txt', 'w', encoding='utf-8') as menu_file:
    for element in Menu_choices:
        menu_file.write(element)

# 写入购物清单输出文件
with open('ShoppingOutput.txt', 'w', encoding='utf-8') as shop_file:
    for element in Menu_choices:
        # 正则规则可根据你的实际条目格式调整,示例是匹配行开头到第一个冒号及后面的空格,替换为空
        shopping_line = re.sub(r'^.*?:\s*', '', element)
        shop_file.write(shopping_line)

可选优化

如果你的条目结构固定,用固定分隔符(如冒号、制表符)区分菜名和原料,可不用正则,用字符串分割更简单稳定:

# 替换上面的正则行即可,按第一个冒号分割取后半部分,去掉前后空白
shopping_line = element.split(':', 1)[1].strip()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:09:03