Почему эта строка не сохраняется в глобальной переменной? - PullRequest
1 голос
/ 07 апреля 2019

Я пишу приложение, используя Python и Kivy.У меня есть функция, которая рисует изображение и экспортирует его в формате PNG.Я пытаюсь использовать это изображение и сохранить его в sql db как BLOB.

Маршрут, который я пытаюсь выбрать, - преобразовать png в поток с помощью BytesIO и затем поместить это значение (string) в переменную, которую я могу затем отправить в БД.

Проблема, с которой я столкнулся, заключается в том, что в рамках функции 'local' я могу преобразовать объект png в поток и распечататьно когда я пытаюсь вывести эту же переменную за пределы функции, она возвращается пустой.

Буду признателен за любую помощь в понимании!Я думаю, это потому, что я использую память функции для преобразования png> IO, и когда она покидает функцию, ей это не нравится.Или, если у вас есть какие-то лучшие решения, я весь слух.

 def savevar(self):
        global driversig
        data = io.BytesIO(open("B.png","r+b").read())
        test = (data.getvalue())

#i've also tried wrapping this in a str() but getvalue() is a string so shouldn't matter?

        driversig = test
        print(driversig)
#this prints fine.

Когда я пытаюсь print(driversig) вне этой функции, он возвращает пустое

Я также пытался print(str(driversig))

моя глобальная переменная пуста.driversig = '' только если вам интересно.Я также не получаю никаких ошибок при печати

1 Ответ

0 голосов
/ 20 апреля 2019

Итак, я разобрался с вопросом:

driversig = '' является глобальным

def savevar(self):
        global driversig
        data = open("B.png","r+b").read()
        test = (data.getvalue())    

        driversig = str(test)
#       ^^ this *change* is now for the local variable and is not effecting the global variable

        print(driversig)
#       ^^ hence why this prints correctly

глобальная переменная driversig по-прежнему пустая строка, и я пытаюсь вызвать эту локальную driversig, которая содержит байты (в виде строки) глобально; но на самом деле я вызываю глобальную переменную emtpy.

Извините, ребята, и спасибо!

...