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

Python实现自定义HTTP服务器时日志文件无法写入问题求助

问题分析与修复方案

根因排查

  • 类型拼接错误:addr[1]返回的端口为整数类型,直接与字符串拼接会触发TypeError,代码运行到写入步骤前就中断,仅执行了open()创建文件的逻辑,后续写入未执行
  • 索引越界异常:如果传入的request为空、或请求行格式不符合HTTP规范,拆分headers[0]时取索引[1]会触发IndexError,同样会中断写入流程
  • 缩进不规范:你贴出的do_LOG方法首行def与下一行path定义的缩进不一致,Python对缩进敏感,若实际代码缩进不符合规范,会导致重写方法不生效,实际执行的是父类的空实现
  • 缓冲区未刷新:若程序在写入后立刻异常退出,缓冲区的内容还没来得及刷入磁盘就被释放,也会导致生成的文件为空

修复后的代码

def do_LOG(self, addr, request):
    path = 'log/logging.txt'
    host = addr[0]
    # 端口转为字符串,避免类型拼接错误
    port = str(addr[1])
    method = request[:4]
    try:
        headers = request.split('\n')
        filename = headers[0].split()[1]
        # 使用with上下文管理器自动处理文件关闭、缓冲区刷新,避免资源泄漏
        with open(path, "a+", encoding="utf-8") as f:
            log_content = f'Server used: {host}\nPort used: {port}\nMethod Served: {method}\nFilename: {filename}\n\n'
            f.write(log_content)
    except (IndexError, TypeError) as e:
        # 异常兜底,请求格式错误时也写入报错信息,避免生成完全空白的日志文件
        with open(path, "a+", encoding="utf-8") as f:
            f.write(f'Invalid log request received, error info: {str(e)}\n\n')
    return

验证步骤

  • 提前确认程序运行的工作目录下存在log文件夹,若不存在需手动创建,避免open抛出路径不存在的异常
  • 可在方法入口添加打印逻辑,确认重写的方法确实被调用,没有走父类的空实现
  • 触发一次HTTP请求后,立刻查看日志文件内容,确认写入正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:15:07