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

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

22.07.2015, 20:40. Показов 1407. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru