Tkinter回调Python索引器中的Tkinter异常错误:列表索引超出范围

2024-06-16 09:05:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个可以创建日语anki deck的应用程序,我已经有了代码,但我想用该代码制作一个应用程序,如果您进入“创建anki deck”,输入kanjis和名称文件,然后按“Es”(现在只适用于西班牙语),您会收到以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.8/tkinter/__init__.py", line 1883, in __call__
    return self.func(*args)
  File "/home/cristobal/Documentos/Programation/Python/Japanese/kanjiGraphics.py", line 255, in <lambda>
    self.languageButtons.append(tkinter.Button(self.window, text = i.capitalize(), bg = "#ffffff", fg = "#2c2c2c",bd = "3", highlightcolor = "#f5f5f5", font = font, command= lambda: self.WriteCalc(self.kanjisEntry[1].get("1.0", "end"), self.kanjisEntry[0].get("1.0", "end"), kanji.GetKanjiMeaningsEs(self.kanjisEntry[0].get("1.0", "end")), kanji.GetKanjiReadingsEs(self.kanjisEntry[0].get("1.0", "end")), kanji.GetKanjiExpamplesEs(self.kanjisEntry[0].get("1.0", "end")), kanji.GetKanjiExampleReadingsEs(self.kanjisEntry[0].get("1.0", "end")), kanji.GetKanjiExampleMeaningEs(self.kanjisEntry[0].get("1.0", "end")))))
  File "/home/cristobal/Documentos/Programation/Python/Japanese/kanji.py", line 282, in GetKanjiReadingsEs
    readings = paragraph[0].text
IndexError: list index out of range

我做了print(len(parapragh))(段落是存储日语字符(kanjis)信息的页面),在那里我得到了错误,首先我得到了82,但它再次打印0,可能是请求或idk:/

此外,如果打印paragraph[0],它将一直工作到readings = paragraph[0]

这可能与参数函数有关,因为在本部分中,我必须将函数作为参数传递:

self.languageButtons.append(tkinter.Button(self.window, text = i.capitalize(), bg = "#ffffff", fg = "#2c2c2c",bd = "3", highlightcolor = "#f5f5f5", font = font, command= lambda: self.WriteCalc(self.kanjisEntry[1].get("1.0", "end"), self.kanjisEntry[0].get("1.0", "end"), kanji.GetKanjiMeaningsEs(self.kanjisEntry[0].get("1.0", "end")), kanji.GetKanjiReadingsEs(self.kanjisEntry[0].get("1.0", "end")), kanji.GetKanjiExpamplesEs(self.kanjisEntry[0].get("1.0", "end")), kanji.GetKanjiExampleReadingsEs(self.kanjisEntry[0].get("1.0", "end")), kanji.GetKanjiExampleMeaningEs(self.kanjisEntry[0].get("1.0", "end")))))

下面是返回错误的脚本 返回错误的函数是GetKanjisReadingEs()

#Libraries
import webbrowser #This library open pages in your main web browser
import requests #This library get the html code of a page
from bs4 import BeautifulSoup #This library prettify the html code


#Get Kanjis Meanings
def GetKanjiMeaningsEs(kanjis):
    allMeanings = []

    #Get the meaning of japanese character

    return allMeanings

#Get japanese characters readings
def GetKanjiReadingsEs(kanjis):

    allReadings = [] #The list where the readings will be stored
    for kanji in kanjis: #This for goes trough all the japanese characters you pass
        kanjiURL = f"https://japonesbasico.com/kanji/{kanji}" #The link
        kanjiRequest = requests.get(kanjiURL) #Get the page from the link

        soup = BeautifulSoup(kanjiRequest.text, "html.parser") #Get the html code of the page

        paragraph = soup.select("p") #Get all the elements with <p> tag in soup

        print(len(paragraph)) #This print for no reason prints twice, first 83 and second 0 (i think this is why index out of range)
        
        readings = paragraph[0].text #Get the first <p> tag what always is the readings #Here i get the error

        end = readings.find("Lecturas japonesas") #Get the value where it has to stop

        chineseReadings = "" #Where the chinese reading (onyomi) of the character will be stored
        japaneseReadings = "" #Where the japanese reading (kunyomi) of the character will be stored
        
        e = 0 #This is a counter
        for i in readings: 
            if e > len("Lecturas chinas") and e < end: #Get the characters between the word chinese readings and the word japanese readings
                chineseReadings += i
            e += 1

        e = 0
        for i in readings:
            if e >= end + len("Lecturas japonesas: "): #Get the characters between the word japanese readings and the end
                japaneseReadings += i 
            e += 1

        allReadings.append([chineseReadings, japaneseReadings]) #Add the readings of one kanji, more kanjis more elements

    return allReadings

#Get words with the kanjis
def GetKanjiExpamplesEs(kanjis):
    allExamples = []

    #Get examples of japanese characters

    return allExamples

def GetKanjiExampleReadingsEs(kanjis):
    allExampleReadings = []

    #Get the reading (how to read) the examples

    return allExampleReadings

#Get example words meaning with the notes (the parentesis after the reading) of the kanji
def GetKanjiExampleMeaningEs(kanjis):
    allExampleMeanings = []

    #Get the meaning of the examples

    return allExampleMeaning

这是我代码的“tkinter”部分:https://paste.pythondiscord.com/ilinonugum.rb

以下是获取日语字符信息的代码:https://paste.pythondiscord.com/kotapiwosi.py

下面是运行应用程序的代码(仅安装类):https://paste.pythondiscord.com/imuvuyikoy.py


Tags: oftheinselfgetreturnthisend