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

Python实现hangman游戏时list.append代码运行报错如何解决?

错误产生原因

Python 中列表的append()方法属于原地操作,执行后只会返回None,不会返回修改后的列表对象。
你代码中words = words.append(line.rstrip())的写法会在第一次循环执行后,把原本的列表变量words覆盖为None,第二次循环尝试调用None.append()时就会触发你遇到的属性错误。

基础修复方案

只需要删除append前的赋值操作即可,同时建议用with语句管理文件打开,避免资源泄漏:

import random

def wordsChoose(mode, words):
    mode = str(mode)+'.txt'
    with open(mode, 'r', encoding='utf-8') as f:
        for line in f:
            words.append(line.rstrip())
    theword = random.choice(words)
    return theword

words = []
result = wordsChoose('fruits', words)
更优实现方案

可以简化参数传递、增加异常处理,逻辑更健壮:

import random

def get_random_word(mode: str) -> str:
    file_path = f"{mode}.txt"
    words = []
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            # 直接用生成式加载所有非空行,自动去重
            words = list({line.strip() for line in f if line.strip()})
    except FileNotFoundError:
        raise ValueError(f"对应词库文件{file_path}不存在,请检查模式参数是否正确")
    
    if not words:
        raise ValueError(f"词库文件{file_path}中没有有效单词")
    
    return random.choice(words)

# 调用示例
target_word = get_random_word('fruits')

优化点说明:

  • 函数内部自行维护词库列表,不需要外部传入空列表做参数,减少冗余逻辑
  • 自动过滤空行,还做了去重处理,避免同一个单词重复加载
  • 增加了文件不存在、词库为空的异常提示,方便排查问题
  • 用f-string拼接路径,代码可读性更高
  • 明确了参数和返回值的类型,后续维护更方便

内容的提问来源于stack exchange,提问作者Dominik Grześkowiak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:06:10