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