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

Python无限循环从API取数写入文件后异常停止求助

我来帮你排查这个问题!这种程序看似正常运行但突然停止写入文件的情况,通常是几个容易被忽略的细节导致的,咱们一步步拆解解决:

最可能的原因:请求无超时导致挂起

你的requests.get没有设置超时时间,如果API服务器偶尔响应缓慢、网络出现隐性卡顿(比如TCP连接没正常断开),请求会一直卡在那里,程序看起来还在运行,但根本没走到写入文件的步骤。这是这类问题的头号元凶。

解决方法:给请求加上超时限制,比如设置10秒超时(可以根据你的API响应速度调整):

r = requests.get('https://someapiserver.com/data/', timeout=10)

隐藏的错误被宽泛的异常捕获掩盖

你用了except:捕获所有异常,而且只打印了模糊的error,这会掩盖很多实际问题——比如API返回了非JSON格式的数据导致r.json()失败、文件写入时的权限波动、甚至是内存小问题。你看不到具体错误,自然不知道程序卡在哪了。

解决方法:捕获具体异常并打印详细信息,方便排查:

import traceback
# ...
except Exception as e:
    print(f'[{time.strftime("%Y-%m-%d %H:%M:%S")}] 出错了:{str(e)}')
    traceback.print_exc()  # 打印完整错误栈,能看到到底哪行出问题
    time.sleep(10)

JSON对象直接写入的潜在问题

r.json()返回的是Python字典或列表对象,直接用f.write(line)会抛出TypeError(因为write只接受字符串)。你的简化代码可能漏了json.dumps()转换步骤?如果API偶尔返回不符合预期的JSON结构,解析失败后被except捕获,但你看不到具体错误,就会误以为程序“没报错但停了”。

解决方法:把JSON对象转成字符串再写入,最好加个换行符方便后续查看:

line = json.dumps(r.json()) + '\n'
with open('file.txt', 'a') as f:
    f.write(line)

可选优化:强制刷新文件缓冲

虽然with块结束会自动关闭文件并刷新缓冲,但Windows系统下偶尔会有系统级缓冲延迟,导致内容没立刻写到磁盘上,看起来像是“停止写入”。可以手动强制刷新:

with open('file.txt', 'a') as f:
    f.write(line)
    f.flush()  # 强制把内存里的内容写到磁盘

优化后的完整代码

把这些调整整合起来,代码会更健壮:

import requests, json, time, traceback

while True:
    try:
        # 带超时的请求,避免挂起
        r = requests.get('https://someapiserver.com/data/', timeout=10)
        # 检查HTTP状态码,4xx/5xx直接抛出异常
        r.raise_for_status()
        # 转换JSON为字符串并添加换行
        line = json.dumps(r.json()) + '\n'
        # 打开文件时指定编码,避免乱码
        with open('file.txt', 'a', encoding='utf-8') as f:
            f.write(line)
            f.flush()
        time.sleep(5)
    except Exception as e:
        # 打印带时间戳的详细错误
        print(f'[{time.strftime("%Y-%m-%d %H:%M:%S")}] 错误详情:{str(e)}')
        traceback.print_exc()
        time.sleep(10)

建议你运行修改后的程序时,盯着控制台输出,看看有没有错误信息——大概率能找到之前“停写”的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:30:05