python中valueerror是什么意思_python-ValueError:不安全的字符串pi
python-ValueError:不安全的字符串pi
当我尝试加载使用cPickle转储的内容时,出现错误消息:
ValueError: insecure string pickle
转储和加载工作都在同一台计算机上完成,因此在同一操作系统上:Ubuntu 8.04。
我该如何解决这个问题?
Peter Long asked 2020-06-20T09:33:20Z
10个解决方案
86 votes
“与Python本身从未见过的bug相比,在全世界每天使用数十亿次的功能中,这种错误的可能性要大得多”:它总是让我感到惊讶,跨平台的人如何进入这些论坛。
解决此问题的一种简单方法是忘记关闭用于转储数据结构的流。 我已经做了
>>> out = open('xxx.dmp', 'w')
>>> cPickle.dump(d, out)
>>> k = cPickle.load(open('xxx.dmp', 'r'))
Traceback (most recent call last):
File "", line 1, in
ValueError: insecure string pickle
这就是为什么我首先来到这里的原因,因为我看不到自己做错了什么。
然后我实际上考虑了此事,而不是只是来这里,并意识到我应该这样做:
>>> out = open('xxx.dmp', 'w')
>>> cPickle.dump(d, out)
>>> out.close() # close it to make sure it's all been written
>>> k = cPickle.load(open('xxx.dmp', 'r'))
容易忘记。 不需要人们被告知他们是白痴。
Allan Ramsay answered 2020-06-20T09:33:48Z
9 votes
由于开放模式“ rb”,我在Python 2.7中遇到此错误:
with open(path_to_file, 'rb') as pickle_file:
obj = pickle.load(pickle_file)
因此,对于Python 2,“模式”应为“ r”
另外,我想知道Python 3不支持Python 2的pickle格式,如果您尝试加载在Python 2中创建的pickle文件,则会得到:
pickle.unpicklingerror: the string opcode argument must be quoted
Oleg Neumyvakin answered 2020-06-20T09:34:17Z
8 votes
检查该线程。 彼得·奥滕(Peter Otten)说:
泡菜坏了。 错误是 如果转储中的字符串确实发生,则引发 并非以“或”开头和结尾。
并显示了重现这种“腐败”的简单方法。 在后续文章中,史蒂夫·霍尔顿(Steve Holden)提出了另一种导致该问题的方法,即不匹配“ rb”和“ wb”(但是在Python 2和Linux中,该特殊错误应该忽略不计)。
Alex Martelli answered 2020-06-20T09:34:46Z
7 votes
您正在处理dump()和load()之间的数据吗? 将腌制的数据存储在以文本模式(在Windows上)中打开的文件中或数据库存储中,以对二进制数据不能正常工作的方式(VARCHAR,某些数据库中的TEXT列,某些键值存储)的方式存储,这是一个常见错误。 尝试比较传递给存储并立即从存储中检索的腌制数据。
Denis Otkidach answered 2020-06-20T09:35:06Z
7 votes
如果有人使用sudo apt-get install libav遇到此错误,则此问题已解决:[https://github.com/rg3/youtube-dl/issues/7172#issuecomment-242961695]
要求评论评论于8月28日
sudo apt-get install libav
应该立即在Mac或
sudo apt-get install libav
#在Linux上
Pysis answered 2020-06-20T09:35:48Z
6 votes
如果您的泡菜很大(Python Issue#11564),则在python 2(和python 3的早期版本)中也可能发生此错误:
Python 2.7.11 |Anaconda custom (64-bit)| (default, Dec 6 2015, 18:08:32)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> import cPickle as pickle
>>> string = "X"*(2**31)
>>> pp = pickle.dumps(string)
>>> len(pp)
2147483656
>>> ss = pickle.loads(pp)
Traceback (most recent call last):
File "", line 1, in
ValueError: insecure string pickle
通过在python 3.4(PEP 3154)中引入pickle协议4解决了此限制。 不幸的是,此功能尚未反向移植到python 2,并且可能永远不会移植到python 2。 如果这是您的问题,并且您需要使用python 2泡菜,则最好的方法是减小泡菜的大小,例如,而不是对list进行酸洗,而不是对元素进行酸洗,将其腌制为list。
Paul Price answered 2020-06-20T09:36:13Z
4 votes
在Windows上使用python制作的文件,在Linux上使用python重新加载的文件也存在同样的问题。解决方案:在Linux上阅读之前,先对文件上的dos2unix进行操作!
am_technix answered 2020-06-20T09:36:34Z
3 votes
我以另一种方式收到了urlsafe_b64encode()消息。
对我来说,它发生在urlsafe_b64encode()对二进制文件进行编码并通过urllib2套接字之后。
最初我是在包装这样的文件
with open(path_to_binary_file) as data_file:
contents = data_file.read()
filename = os.path.split(path)[1]
url = 'http://0.0.0.0:8080/upload'
message = {"filename" : filename, "contents": contents}
pickled_message = cPickle.dumps(message)
base64_message = base64.b64encode(pickled_message)
the_hash = hashlib.md5(base64_message).hexdigest()
server_response = urllib2.urlopen(url, base64_message)
但是在服务器上,对于某些二进制文件,哈希值以不同的方式出现
decoded_message = base64.b64decode(incoming_base64_message)
the_hash = hashlib.md5(decoded_message).hexdigest()
和解开给urlsafe_b64encode()消息
cPickle.loads(decoded_message)
但是成功
对我有用的是使用urlsafe_b64encode()
base64_message = base64.urlsafe_b64encode(cPickle.dumps(message))
并用
base64_decoded_message = base64.urlsafe_b64decode(base64_message)
参考文献
[HTTP://docs.Python.org/2/library/巴塞64.HTML]
[HTTPS://tools.I ETF.org/HTML/RFC3548.HTML#section-3]
HeyWatchThis answered 2020-06-20T09:37:38Z
1 votes
这就是我所发生的事情,可能只是一小部分人,但是我还是想在这里为他们介绍一下:
解释器(Python3)会给您一个错误,指出它要求输入文件流以字节为单位,而不是字符串,并且您可能已将打开模式参数从'r'更改为'rb',现在是 告诉您字符串已损坏,这就是为什么您来这里。
在这种情况下,最简单的选择是安装Python2(可以安装2.7),然后在Python 2.7环境下运行程序,这样它就可以释放文件而不会出现问题。 基本上,当我要做的只是将打开文件的模式从rb更改为r,然后使用Python2解开文件时,我浪费了很多时间来查看字符串是否确实损坏。 所以我只是把这些信息放在那里。
Arijit answered 2020-06-20T09:38:08Z
0 votes
我较早地遇到了这个问题,找到了这个线程,并假设我不受几个答案中提到的文件关闭问题的影响,因为我使用的是with语句:
with tempfile.NamedTemporaryFile(mode='wb') as temp_file:
pickle.dump(foo, temp_file)
# Push file to another machine
_send_file(temp_file.name)
但是,由于我是从with内部推送临时文件的,因此该文件仍未关闭,因此我推送的文件被截断了。 这导致在读取远程计算机上的文件的脚本中出现相同的insecure string pickle错误。
对此的两个潜在修复:保持文件打开并强制刷新:
with tempfile.NamedTemporaryFile(mode='wb') as temp_file:
pickle.dump(foo, temp_file)
temp_file.flush()
# Push file to another machine
_send_file(temp_file.name)
或者在执行任何操作之前确保文件已关闭:
file_name = ''
with tempfile.NamedTemporaryFile(mode='wb', delete=False) as temp_file:
file_name = temp_file.name
pickle.dump(foo, temp_file)
# Push file to another machine
_send_file(file_name)
0x5453 answered 2020-06-20T09:38:42Z
python中valueerror是什么意思_python-ValueError:不安全的字符串pi相关推荐
- python中函数startswith的用法_Python中用startswith()函数判断字符串开头的教程
函数:startswith() 作用:判断字符串是否以指定字符或子字符串开头 一.函数说明语法:string.startswith(str, beg=0,end=len(string)) 或strin ...
- [转载] python中for语句用法_详解Python中for循环的使用_python
参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...
- python中for语句用法_详解Python中for循环的使用_python
这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...
- python中异或怎么算_python 异或运算的前提_异或运算公式
Python基础(10)–数字-Python-第七城市 609x288 - 73KB - JPEG Python基础(10)--数字_资讯_突袭网 609x288 - 33KB - JPEG pyth ...
- python中最基本的系列_Python中最基本的10个内容
Python简单易学,但又博大精深.许多人号称精通Python,却不会写Pythonic的代码,对很多常用包的使用也并不熟悉.学海无涯,我们先来了解一些Python中最基本的内容. Python的特点 ...
- 站长在线Python精讲:在Python中使用split()方法分割、使用join()方法合并字符串详解
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用split()方法分割.使用join()方法合并字符串详解>.本知识点主要内容有:在Python中使用s ...
- python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景
装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...
- python中find函数忽略大小写_python字符串(大小写、判断、查找、分割、拼接、裁剪、替换、格式化)...
一.通用操作 1.Python len() 方法返回对象(字符.列表.元组等)长度或项目个数. 语法 len()方法语法: len( q ) 参数 q -- 对象. 返回值 返回对象长度. 实例 以下 ...
- python中startout是什么意思_Python socket.timeout方法代碼示例
本文整理匯總了Python中gevent.socket.timeout方法的典型用法代碼示例.如果您正苦於以下問題:Python socket.timeout方法的具體用法?Python socket ...
最新文章
- 访问级别约束0906
- Linux arm9 设置中断向量表,STM32学习笔记之中断向量表,MDK程序启动分析
- linux 进程间通信之pipe
- python爬虫爬取ip记录网站信息并存入数据库
- Node.js读取mongoDB并输出json数据
- 熬了整整30天,java工作流开发
- [转]OpenGL基础技术讲座--发展历史
- Java飞机大战超全版(plus版)
- 使用dll查看器dll文件中的内容
- Scratch编程入门
- 四轴飞行器基础介绍篇
- SQL基础教程【日】MICK著 孙淼 罗勇译 ISBN 978-7-115-32269-2
- 逆矩阵的六个注意事项
- 计算机和数学专业哪个难,学计算机专业难吗 数学很差能学吗
- 无领导小组讨论题目分类
- 大道至简:大数据、小数据、量化交易
- 还在用电脑多控手机?你out了,手机多控手机,全新神器
- 图像处理学习 灰度图像与二值图像
- 让ChatGPT成为你的人工智能好友
- Java语法(全面解析)
热门文章
- Codeforces 332B Maximum Absurdity(DP+前缀和处理)
- python ppt 图片_利用Python将PPT转换为图片并合成长图
- Clinical Chemistry | 张建中/徐健开发幽门螺杆菌单细胞精准诊疗技术
- 编写一个判别素数(质数)的函数 int isPrime(int x)。在 main 函数中,输入一个正整数 n,输出 1~n 之间的所有素数以及素数的个数
- 直方图规定化、均衡化变换—Matlab数字图像处理(三)
- iOS 音频视频制作
- xstart下远程报错已拒绝X11转移申请的解决方法
- oracle安装使用
- SDL游戏开发之一-SDL的简介
- oracle配置odbc数据源