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

使用discord.py调用Bible API获取随机经文遇KeyError问题求助

问题修复方案

核心错误分析

  1. KeyError 触发原因:有效响应的JSON数据里不存在error字段,直接用json_data['error']访问会抛出异常,必须用安全的字段检查方式。
  2. URL格式错误:请求地址中多余的横杠(-)导致API无法正确解析章节,不符合BOOK+CHAPTER:VERSE的要求。
  3. 数据访问错误:API返回的是单个字典而非列表,用json_data[0]['reference']索引会报错。
  4. 循环无终止逻辑:原代码仅设置find_book = False但未跳出循环,会陷入无限执行。

修复后的完整代码

import requests
import json
import random

# 替换为你的圣经书籍名称列表
bible_books = ["Genesis", "Exodus", "Leviticus", "Romans", "John"]

def get_random_bible_verse():
    while True:
        # 生成符合API要求的请求地址
        book = random.choice(bible_books)
        chapter = random.randint(1, 150)
        verse = random.randint(1, 176)
        url = f"https://bible-api.com/{book}+{chapter}:{verse}"
        
        response = requests.get(url)
        json_data = json.loads(response.text)
        
        # 安全检查error字段,不存在则返回None
        if json_data.get('error') != 'not found':
            # 正确提取经文信息
            reference = json_data['reference']
            verse_text = json_data['text'].strip()
            translation = json_data['translation_name']
            
            # 打印并返回结果
            print(f"{reference} ({translation})")
            print(verse_text)
            return reference, verse_text, translation

关键修复点说明

  • 安全检查错误字段:使用json_data.get('error')替代直接索引,避免KeyError,当字段不存在时返回None,自然跳过错误判断逻辑。
  • 修正请求URL:移除多余的横杠,严格遵循API的BOOK+CHAPTER:VERSE格式,减少无效请求。
  • 正确访问数据:直接通过字典键提取内容(json_data['reference']、json_data['text']),无需列表索引。
  • 添加终止逻辑:获取有效数据后用return终止函数,同时返回所需的经文信息供discord.py调用。

额外优化建议

不同圣经书籍的章节数差异很大(比如罗马书仅16章,诗篇有150章),可以给每个书籍配置对应的最大章节数,减少无效请求次数,示例:

book_chapters = {
    "Genesis": 50,
    "Exodus": 40,
    "Romans": 16,
    "John": 21
}

# 生成章节时使用对应书籍的最大章节数
chapter = random.randint(1, book_chapters[book])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:25:19