С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 46

Получение значений переменных в классах

22.07.2015, 20:40. Показов 1375. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столкнулся с таким вопросом. Функция adobj в классе Add обращается к внешней функции zap, передавая в нее две переменных. Из функции zap в adobj возвращается переменная К, которой присваивается значение словаря.
Вопрос. Когда аналогичные процессы проворачивались без использования классов, все работало прекрасно. Как только появилось получение значения путем
Python
1
name = self.name2.get()
при попытке вызвать name, в случае - если name - значение словаря, приводит к ошибке:

Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/shelve.py", line 111, in __getitem__
value = self.cache[key]
KeyError: '1'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/tkinter/__init__.py", line 1533, in __call__
return self.func(*args)
File "/Users/rust-resisting/Desktop/Untitled2.py", line 138, in adobj
zap(obj,name)
File "/Users/rust-resisting/Desktop/Untitled2.py", line 58, in zap
k=file[name]
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/shelve.py", line 113, in __getitem__
f = BytesIO(self.dict[key.encode(self.keyencoding)])
KeyError: b'1'

Пример кода:


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Add(Frame):
    def __init__(self,master):
        super(Add,self).__init__(master)
        self.grid()
        self.create_widgets()
    def create_widgets(self):
        
        Label(self,text="Имя:").grid(row=0,column=0,sticky=W)
        self.zak = Entry(self)
        self.zak.grid(row=1,column=0,sticky=W)
        
        self.otpr = Button(self,text="Добавить",command=self.doba)
        self.otpr.grid(row=2,column=0,sticky=W)
 
    def doba(self):
        name = self.zak.get()
        file = shelve.open("file.dat","c")
        if name not in file:
            Label(self,text="Объект:").grid(row=4,column=0,sticky=W)
            self.obj=Entry(self)
            self.obj.grid(row=5,column=0,sticky=W)
            self.otpr = Button(self,text="Добавить",command=self.adobj)
            self.otpr.grid(row=6,column=0,sticky=W)
            file.close()
 
    def adobj(self):
        obj=self.zak.get()
        name = self.zak.get()
        k=zap(obj,name)
        self.otvet = Text(self,width=35,height=5,wrap=WORD)
        self.otvet.grid(row=7,column=0,columnspan=2,sticky=W)
        self.otvet.insert(0.0,k)
Кусок кода из функции ZAP(obj,name):

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   
    file = shelve.open("file.dat","c")
    n = []
    for i in file:
        for a in file[i]:
            n.append(a)
    file.close()
    num0 = len(n)+1
    kv = kva()
    year = yea()
    kv = str(kv)
    year = str(year)
    num0 = str(num0)
    num = num0+"-"+kv+"-"+year
    dog = 0
    dat=[num,obj,dog]
    file = shelve.open("file.dat","c")
    k=file[name]
    return k
Я так понимаю, что при вызове значения через
Python
1
name = self.name2.get()
возвращается не строка?

Помогите, пожалуйста

Добавлено через 1 час 18 минут
Упростил кусок кода.
Задам вопрос проще - почему вылетает ошибка (указана выше) в коде:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import os, shelve, datetime,pickle
from tkinter import*
 
 
 
 
class Add(Frame):
    def __init__(self,master):
        super(Add,self).__init__(master)
        self.grid()
        self.create_widgets()
        
    def create_widgets(self):
 
        Label(self,text="Название объекта").grid(row=4,column=0,sticky=W)
        self.obj=Entry(self)
        self.obj.grid(row=5,column=0,sticky=W)
        self.otpr = Button(self,text="Добавить",command=self.adobj)
        self.otpr.grid(row=6,column=0,sticky=W)
 
    def adobj(self):
        name = self.obj.get()
        a = {}
        file = shelve.open("1.dat")
        file['a'] = [1,2,3]
        file.sync()
        file.close()
        file = shelve.open("1.dat","c")
        nn = file[name]
        self.otvet = Text(self,width=35,height=5,wrap=WORD)
        self.otvet.grid(row=7,column=0,columnspan=2,sticky=W)
        self.otvet.insert(0.0,nn)
 
        
root = Tk()
root.title("v.1.0")
root.geometry("220x250")
app = Add(root)
root.mainloop()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.07.2015, 20:40
Ответы с готовыми решениями:

Вывод значений переменных в двух разных классах
Доброго времени суток.По заданию необходимо создать переменные со спецификаторами public и private,и вывести их в 2х классах.Я объявил эти...

Получение значений переменных сред
Приветы всем. Помогите найти решение или объяснение, ситуация такая, нужно узнать две переменные Userprofile и папку временных файлов...

Получение текущих значений переменных из активной программы
Посоветуйте программу, предназначенную для мониторинга наименований и значений переменных в работающей программе (если такая существует.

1
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
22.07.2015, 20:44
rust-resisting, Потому что в файле нет ничего такого под таким ключом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.07.2015, 20:44
Помогаю со студенческими работами здесь

получение значений переменных из файла при возврате Activity на экран. правильно ли я поступаю ?
Имеется основное Activity приложения, которое ранее было перекрыто другим Activity (настройками), когда оно возвращается на экран - нужно...

Получение первых строк двух файлов в переменные и сравнение значений этих переменных
Приветствую... Народ прошу помогите написать бат программу...я бы и сам написал, но знаю только pascal а мне нужно чтоб пошло не только...

Приравнивание переменных в классах.
Почему нельзя в классе сразу после объявления переменной прировнять её к определенному значению? Нампример: AnsiString...

Получение информации о классах
В пространстве имён System.Reflection есть классы FieldInfo, MethodInfo, PropertyInfo и т. д. Я могу получить, например, информацию о...

Получение информации о классах в C#
Помогите найти способ решения. Учу C# не так давно. Стоит задача разработать Windows-приложение, которое должно выдавать информацию о...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru