اذهب إلى المحتوى
  • 0

كيفية إصلاح خطأ KeyError في كود Python

عمار هبه

السؤال


from tkinter import *
from tkinter.colorchooser import *
from tkinter.messagebox import *
from tkinter.constants import *

#g= tkinter.Tk()
g=Tk()
#g.config(background="white")
n=StringVar()
q=1
questions={" 1.which this program? :":"C. py",
" 2.why you use py? :":"D. both AB",
" 3.when you will be a programer?:":"D. fastly ",
#" 4.why you choice py?: ":"A"
}
options=[["A. java","B. c++","C. py","D. code"],
["A. easy","B. global","C. non","D. both AB"],
["A. after year","B.after six month","C. noon","D. fastly "],
#["A. easy","B. global","C. someone recommend","D. yes "]
]

def cin():
    global q
    if q < len(questions):
        ff=Label(g,text=questions[q])
        ff.pack()
        k =(questions.get(questions[q]))
        for i in options[q-1]:
            c = Radiobutton(g, text = i,fg = "black", width = 12, height = 1,variable=n, value=i ,bd = 2, bg = "white", cursor = "hand2" ,command=lambda:cin())
            c.pack()
            s = n.get()
            if s == k :
                showinfo(title='information',message='hi.. u passed')
                q += 1
            else:
                showerror(title='error',message='hi.. u missed something')
    else:
        showinfo(title='information',message='hi.. u finished')

cin()
g.mainloop()

يظهر لي الخطأ التالي:

Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 41, in <module>
    cin()
  File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 25, in cin
    ff=Label(g,text=questions[q])
KeyError: 1


بينما انا اللي اريده يطلع لي السؤال الاول مع خيارته واجيب عليه واذا كانت الاجابه صح يطلع لي السؤال الثاني.. وهكذا

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال ونص السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

المشكلة هيKeyError: 1 ، وتعني أن البرنامج يحاول الوصول إلى مفتاح غير موجود في قاموس questions، والمفتاح هو قيمة متغير q ، وهي 1 ولكن لا يوجد مفتاح بقيمة 1 في قاموس questions.

عليك التأكد من أن متغير q يكون دائمًا ضمن نطاق مفاتيح قاموس questions، وذلك عن طريق التحقق من قيمة q قبل محاولة الوصول إلى عنصر questions[q].

from tkinter import *
from tkinter.colorchooser import *
from tkinter.messagebox import *
from tkinter.constants import *

#g= tkinter.Tk()
g=Tk()
#g.config(background="white")
n=StringVar()
q=1
questions={" 1.أيّ لغة برمجة هذه؟ :":"C. بايثون",
" 2.لماذا تستخدم بايثون؟ :":"D. كلاهما",
" 3.متى ستصبح مبرمجاً؟:":"D. بسرعة ",
#" 4.لماذا اخترت بايثون؟: ":"A"
}
options=[["A. جافا","B. سي++","C. بايثون","D. كود"],
["A. سهلة","B. عالمية","C. غير","D. كلاهما"],
["A. بعد عام","B. بعد ستة أشهر","C. الظهر","D. بسرعة "],
#["A. سهلة","B. عالمية","C. شخص أوصى بها","D. نعم "]
]

def cin():
    global q
    if q < len(questions):
        if q in questions:
            ff=Label(g,text=questions[q])
            ff.pack()
            k =(questions.get(questions[q]))
            for i in options[q-1]:
                c = Radiobutton(g, text = i,fg = "black", width = 12, height = 1,variable=n, value=i ,bd = 2, bg = "white", cursor = "hand2" ,command=lambda:cin())
                c.pack()
            s = n.get()
            if s == k :
                showinfo(title='معلومات',message='مبروك، لقد نجحت')
                q += 1
            else:
                showerror(title='خطأ',message='لقد أخطأت')
    else:
        showinfo(title='معلومات',message='لقد انتهيت')

cin()
g.mainloop()

الفرق الرئيسي بين الكود السابق والكود الخاص بك، هو أنني أضفت فحصًا لمتغير q قبل محاولة الوصول إلى عنصر questions[q].

وإذا لم يكن متغير q موجودًا في قاموس questions ، فسيقوم البرنامج ببساطة بتخطي هذا السؤال والانتقال إلى السؤال التالي.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...