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

Telegram Bot运行bot.polling()报token未定义错误排查

问题根因

报错指向非常明确:Python原生的os.getenv()方法不会自动加载项目目录下.env文件中配置的环境变量。你虽然把Bot Token写入了.env文件,但没有执行加载.env的逻辑,os.getenv('API_KEY')实际返回空值None,初始化TeleBot实例时传入的Token无效,等到执行bot.polling()发起接口请求时就会触发「Bot token is not defined」异常。

解决方案

按以下步骤操作即可修复:

  • 安装用于加载.env配置的依赖库python-dotenv
pip install python-dotenv
  • 确认项目根目录下的.env文件配置格式正确,不要给Token值加多余的引号、不要有拼写错误,正确格式示例:
API_KEY=你从@BotFather获取到的完整Bot Token字符串
  • 修改代码,在读取环境变量前先加载.env文件,修正后的完整可运行代码如下:
import os
import telebot
from dotenv import load_dotenv

# 加载当前项目根目录下的.env文件配置到系统环境变量
load_dotenv()

API_TOKEN = os.getenv('API_KEY')
# 增加前置校验,避免等到发起请求才发现Token为空
if not API_TOKEN:
    raise RuntimeError("未读取到API_KEY配置,请检查.env文件位置和配置内容")

bot = telebot.TeleBot(API_TOKEN)

@bot.message_handler(commands=['hello'])
def send_welcome(message):
    bot.reply_to(message, "HI!")

if __name__ == "__main__":
    bot.polling()
额外排查点

如果按上述步骤修改后仍然报错,检查以下两点:

  • 运行脚本时的工作目录是否为项目根目录,load_dotenv()默认从当前工作目录查找.env文件,如果工作目录不对会找不到配置文件
  • 检查.env文件名是否正确,不要写成.env.txt这类带后缀的格式,Windows系统默认隐藏文件后缀,很容易踩这个坑

临时测试的话也可以不用.env文件,直接在运行脚本前在终端设置环境变量:macOS/Linux系统执行export API_KEY=你的BotToken,Windows CMD执行set API_KEY=你的BotToken,之后在同一个终端窗口运行脚本即可,不过这种方式每次新开终端都要重新设置,只适合临时调试用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:18:47