为什么此字符串不保存在全局变量中?

时间:2019-04-06 22:38:29

标签: python-3.x bytesio

我正在使用Python和Kivy编写应用程序。我有一个绘制图像并将其导出为png的函数。我正在尝试使用该图像并将其作为BLOB保存在sql db中。

我尝试采用的方法是使用BytesIO将png转换为流,然后将该值(字符串)放入一个变量中,然后将其发送到数据库中。

我遇到的问题是,在“本地”函数中,当我尝试在函数返回空值的情况下打印此相同变量时,我可以将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 :(得分:0)

所以我想出了问题:

DELIMITER // DROP TRIGGER IF EXISTS invoice_generate_id// CREATE TRIGGER invoice_generate_id BEFORE INSERT ON invoices FOR EACH ROW BEGIN SET NEW.id = CONCAT (new.client,'-', new.order, IFNULL(new.variant,''), IF(new.subinvoice IS NULL, '',CONCAT('-',new.subinvoice)) ); END// DELIMITER ; 是全局的

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,该局部包含全局字节(作为字符串);但实际上,我将其称为emtpy全局变量。

对不起,谢谢!