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

Python Telegram Bot无法返回本地文件内容:请求排查故障原因

问题排查与修复

核心问题1:返回值类型错误

curl_request函数返回的是元组(用逗号分隔两个值会创建元组),而bot.send_message需要接收字符串类型的消息内容。Telebot在处理元组时只会显示第一个元素,导致日志内容被丢弃。

修复方法:将返回的两个字符串拼接在一起,而不是返回元组:

def curl_request():
    resp = requests.get(url)
    if resp.status_code == 200:
        return "Available \n" + current_status()  # 用+拼接字符串
    else:
        return "Isn't available \n" + current_status()

核心问题2:条件判断逻辑错误

if message.text == "Status" or "status" 这个写法逻辑错误,"status"是一个非空字符串,永远为真,导致任何文本消息都会触发Status分支。

修复方法:改成正确的相等判断:

def get_text_messages(message):
    # 方法1:直接判断两种情况
    if message.text == "Status" or message.text == "status":
        bot.send_message(message.from_user.id, curl_request())
    # 方法2:统一转小写判断,更简洁
    # if message.text.lower() == "status":
    #     bot.send_message(message.from_user.id, curl_request())

可选优化:读取完整日志内容

current_status里的file.readline()只会读取日志的第一行,如果需要返回全部日志内容,改成file.read():

def current_status():
    with open('current_status.log') as file:
        status = file.read()  # 读取全部内容
        return status

完整修复后的代码

import telebot
import requests

url = "https://link.com"
bot = telebot.TeleBot('TOKEN')

@bot.message_handler(content_types=['text'])
def get_text_messages(message):
    if message.text.lower() == "status":
        bot.send_message(message.from_user.id, curl_request())

def current_status():
    with open('current_status.log') as file:
        return file.read()

def curl_request():
    resp = requests.get(url)
    if resp.status_code == 200:
        return "Available \n" + current_status()
    else:
        return "Isn't available \n" + current_status()

bot.polling(none_stop=True, interval=0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:50:21