PyGithub鉴权异常:Click开发CLI工具时token请求头无效报错
解决PyGithub + Click CLI的Header值无效问题
嘿,我一眼就揪出问题所在了——你的.env文件读取逻辑没处理行尾的换行符!错误日志里的b'token omitted\n'已经很明显,token后面多了个\n换行符,导致PyGithub把带换行的字符串塞进请求头里,直接触发了ValueError。
问题根源
你的readEnvironment函数解析.env文件时,直接把split后的value赋值给环境变量,但每行末尾的换行符(\n)也被一起带进去了。比如你.env里写的是:
GITHUB_ACCESS_TOKEN=your_valid_token
读取后value实际是your_valid_token\n,这个带换行的字符串作为请求头token时,HTTP客户端自然会判定为无效内容。
修复后的完整代码
只需要在赋值环境变量前,给value调用strip()方法去除首尾空白字符(包括换行、空格、制表符等),同时还做了一些细节优化:
from github import Github import os import click # 别忘了导入click! def readEnvironment(): 'This function reads in the environment variables from a file if needed' if os.path.isfile('.env'): with open('.env', 'r') as file: for line in file: line = line.strip() # 先去除整行首尾空白,跳过空行 if not line or line.startswith('#'): continue # 处理可能存在的`export `前缀 if line.startswith('export '): line = line[7:] # 分割键值对 key, value = line.split('=', 1) os.environ[key.strip()] = value.strip() # 给键和值都做去空白处理 @click.group() def cli(): pass @click.command() @click.option('--token', default=None, help='The Github access token') def github(token): # 安全获取环境变量,避免KeyError env_token = os.environ.get('GITHUB_ACCESS_TOKEN', '') if not token: token = env_token.strip() # 检查token是否有效,给用户友好提示 if not token: raise click.ClickException("请提供Github access token:要么用--token参数,要么在.env文件中设置GITHUB_ACCESS_TOKEN") client = Github(token) print(f"已成功连接Github客户端: {client}") # 遍历当前用户的仓库 for repo in client.get_user().get_repos(): print(repo.name) cli.add_command(github) if __name__ == '__main__': readEnvironment() cli()
额外优化说明
- 新增了
click.ClickException,当用户没提供token时给出清晰提示,比直接崩溃更友好 - 用
os.environ.get()替代直接索引,避免环境变量不存在时触发KeyError - 处理了
.env文件中常见的export前缀(很多人写.env会加这个) - 自动跳过空行,避免无效解析逻辑
这样修改后,你的CLI工具就能正确读取并使用token,不会再出现请求头无效的问题了。
内容的提问来源于stack exchange,提问作者wogsland
相关产品推荐
相关产品推荐

