Python 3.x 为什么不是';这个字符串是否保存在全局变量中?

Python 3.x 为什么不是';这个字符串是否保存在全局变量中?,python-3.x,bytesio,Python 3.x,Bytesio,我正在使用Python和Kivy编写一个应用程序。我有一个函数,可以绘制图像并将其导出为png。我正在尝试使用该图像并将其作为BLOB保存在sql db中 我尝试采用的方法是使用BytesIO将png转换成流,然后将这个值(字符串)放入一个变量,然后将其发送到db 我遇到的问题是,在“local”函数中,我能够将png对象转换为流并打印它,但当我尝试在函数外部打印相同的变量时,它返回空 任何洞察帮助都将不胜感激!我想这是因为我使用函数的内存来转换png>IO,当我离开函数时,它不喜欢它。或者如果

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

我尝试采用的方法是使用BytesIO将png转换成流,然后将这个值(字符串)放入一个变量,然后将其发送到db

我遇到的问题是,在“local”函数中,我能够将png对象转换为流并打印它,但当我尝试在函数外部打印相同的变量时,它返回空

任何洞察帮助都将不胜感激!我想这是因为我使用函数的内存来转换png>IO,当我离开函数时,它不喜欢它。或者如果你有更好的解决办法,我洗耳恭听

def savevar(自):
全球驱动
data=io.BytesIO(打开(“B.png”、“r+B”).read())
测试=(data.getvalue())
#我也尝试过用str()来包装它,但是getvalue()是一个字符串,所以不重要吗?
driversig=测试
打印(驱动程序)
#这个印得很好。
当我尝试在这个函数之外打印(driversig)时,它返回空

我还尝试了
print(str(driversig))


我的全局变量为空
driversig=''
以防万一。我在打印时也没有收到任何错误,因此我解决了问题:

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全局变量


对不起,伙计们,谢谢你们

所以我发现了问题:

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全局变量


对不起,伙计们,谢谢你们

你为什么要使用
BytesIO
open(…).read()
为您提供文件的内容,将其填充到
BytesIO
对象中,然后检索它只是一种浪费。您确定向我们展示的代码片段与实际代码相符吗?因为我无法复制这个问题。如果您多次(即在一个循环中)读取(真实)文件中的数据,那么最后会得到一个空结果,因为该文件已全部读取?对于测试,可能将
print
行更改为
print(“driversig is”,repr(driversig))
,这样您就可以看到在成功打印结果之后是否打印了空结果。@jasonharper我需要db条目号的流?我现在就试试你的方法。@Blckknght-arrr是的,可能是这样,尽管肯定没有循环。奇怪的是,如果我将png文件的内容放在一个变量中,然后在函数中打印该变量。。它会打印,但当它在外面时就不会了。它不是完整的代码,但函数是完整的。其他位只是调用或打印此函数外部的变量。我试试看。@jasonharper你说得对!调用它而不结束它会产生相同的字符串。但是仍然不适用于全局指定的变量。为什么要涉及
BytesIO
open(…).read()
为您提供文件的内容,将其填充到
BytesIO
对象中,然后检索它只是一种浪费。您确定向我们展示的代码片段与实际代码相符吗?因为我无法复制这个问题。如果您多次(即在一个循环中)读取(真实)文件中的数据,那么最后会得到一个空结果,因为该文件已全部读取?对于测试,可能将
print
行更改为
print(“driversig is”,repr(driversig))
,这样您就可以看到在成功打印结果之后是否打印了空结果。@jasonharper我需要db条目号的流?我现在就试试你的方法。@Blckknght-arrr是的,可能是这样,尽管肯定没有循环。奇怪的是,如果我将png文件的内容放在一个变量中,然后在函数中打印该变量。。它会打印,但当它在外面时就不会了。它不是完整的代码,但函数是完整的。其他位只是调用或打印此函数外部的变量。我试试看。@jasonharper你说得对!调用它而不结束它会产生相同的字符串。但仍然不适用于全局指定的变量。