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

如何将Python脚本的屏幕输出保存到文本文件并解决TypeError报错

报错原因与修正方案

核心问题定位

  • 触发TypeError的直接原因:bios_version()函数全程没有设置返回语句,按照Python的默认规则,没有return的函数最终会返回None;执行f.write(bios_version())时等于把None传入仅接受字符串参数的文件写入方法,自然抛出类型不匹配的错误
  • 代码中还有几处会导致后续运行出错的隐藏问题:
    • 使用os.path.join拼接文件路径,但从未导入os模块,运行到路径拼接步骤会抛出NameError
    • 手动写的文件关闭语句f.close缺少调用括号,实际不会执行关闭动作,容易造成文件句柄泄漏、写入内容丢失
    • 重复调用两次bios_version(),会导致控制台重复打印冗余内容

修正实现步骤

  1. 调整bios_version()函数逻辑:不要只在控制台print内容,要把需要保存的信息拼接成完整字符串,在保留控制台打印效果的同时,通过return把字符串返回给主流程,方便后续做文件写入
  2. 补充导入缺失的os模块
  3. 用Python的上下文管理器with操作文件,自动处理文件打开、关闭的全流程,避免手动操作的疏漏;打开文件时指定utf-8编码,避免内容乱码

修正后可直接运行的代码

import platform
import os

def bios_version():
    uname_result = platform.uname()
    pl = {}
    pl['BIOS version'] = uname_result.version
    # 拼接格式化的输出字符串
    output_content = "\n".join([f"{item_key}: {item_val}" for item_key, item_val in pl.items()])
    # 控制台正常打印内容
    print(output_content)
    # 返回字符串供文件写入使用
    return output_content

# 仅调用一次函数拿到保存内容,避免重复输出
save_content = bios_version()
save_path = 'D:/'
name_of_file = input("What is the name of the file: ")
complete_file_path = os.path.join(save_path, f"{name_of_file}.txt")

# with上下文管理器自动处理文件关闭,无需手动写close
with open(complete_file_path, "w", encoding="utf-8") as file_handle:
    file_handle.write(save_content)

补充说明:如果后续需要把脚本所有控制台输出都统一存档,也可以通过重定向标准输出流的方式实现,但对于当前只需要保存BIOS版本信息的场景,修改函数返回值的方案逻辑最清晰、调试成本最低。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 07:06:10