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

Replit运行Discord bot报TypeError:int()参数不能为NoneType如何解决

报错原因分析

报错TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'触发自代码中port=int(os.getenv('redis_port'))行:os.getenv()在找不到对应名称的环境变量时会返回None,你的代码没有设置读取失败的默认值,当Replit项目的Secrets配置中不存在redis_port键、或键名拼写错误时,os.getenv('redis_port')返回None,传入int()方法就会触发该报错。

可行解决方案
  • 先检查Replit项目的Secrets配置面板,确认存在redis_port这个键,且值为合法的数字端口号,同时同步核对redis_hostname、redis_password、owner_id三个键的拼写和值是否正确,避免后续出现其他环境变量读取失败的问题。
  • 给os.getenv()补充默认值,同时增加环境变量合法性校验逻辑,避免运行时直接抛出异常,修改后的参考代码如下:
import os
import redis

debug = False
owner = os.getenv('owner_id')

# 读取环境变量,不存在时先赋默认值
redis_host = os.getenv('redis_hostname', 'localhost')
redis_port = os.getenv('redis_port', '6379') # 默认值用字符串类型,适配后续int转换逻辑
redis_pwd = os.getenv('redis_password', None)

# 可选:增加端口合法性校验,避免非法值报错
try:
    redis_port = int(redis_port)
    if not (1 <= redis_port <= 65535):
        raise ValueError("端口号超出1-65535的合法范围")
except (ValueError, TypeError) as e:
    print(f"Redis端口配置错误: {e},将使用默认端口6379")
    redis_port = 6379

redis_server = redis.Redis(
  host=redis_host,
  port=redis_port,
  password=redis_pwd
)
  • 若确认Secrets已经配置了正确的redis_port仍然报错,可以在读取环境变量的代码后加一行调试打印:print(os.getenv('redis_port')),运行后如果输出为None,说明Secrets里的键名和代码里写的键名拼写不一致,注意大小写不要写错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:36:01