`
san_yun
  • 浏览: 2652041 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

python反序列化的坑

 
阅读更多

今天遇到python一个坑,调用memcached的get_man报错:

 

memcache2 get :1:photo:latest:forward:5855687 cost 2857.6438427
转发 <#59066487>
unpickle :1:photo:latest:forward:5855687 FAIL __import__() argument 1 must be string without null bytes, not str
 

同样一个key,一个是通过get,一个是通过get_many,结果报错。code如下:

 

# -*- coding: utf-8 -*-

from django.core.management import setup_environ
import settings
setup_environ(settings)

key = 'photo:latest:forward:5855687'
from django.core.cache import cache
print cache.get(key)
print cache.get_many([key])

 跟进代码发现问题出在get_man的反序列化上:

 

def get_multi(self,key):
        result = cacheService.getMulti(key)
        if result is None:
            return []
        else:
            result_dict = {}
            for k,val in result.items():
                try:

                    file = StringIO(val)
                    _up = unpickler(file)
                    val = _up.load()
                    result_dict[k] = val 
                except Exception,e:
                    print 'unpickle %s FAIL  %s'%(k,e)
                    pass
            return result_dict

 尝试把序列化改成:

result_dict[k] = pickle.loads(val)

 报错信息变了:

unpickle :1:photo:latest:forward:5855687 FAIL  must be string, not unicode

 

难道是val的type不是str,是unicode? 通过print type(val) 打印出来,果然是unicode。

 


 

 

 

  • 大小: 43.5 KB
分享到:
评论

相关推荐

    python反序列化-分离免杀1

    Python 反序列化是一种数据恢复技术,它允许程序将之前序列化的对象状态还原为可执行的形式。在网络安全领域,尤其是渗透测试和红队行动中,反序列化被用于实现某些高级攻击技术,如远程代码执行(RCE)和免杀(防...

    python序列化反序列化和异常处理笔记.doc

    Python的序列化与反序列化是将数据结构或对象转换为可存储或传输的格式,然后再次转换回原数据的过程。这一过程对于保存程序状态、跨进程通信、数据持久化等场景非常有用。Python提供了多种序列化库,如pickle、json...

    利用Python反序列化运行加载器实现免杀1

    Python 反序列化是一种将序列化的数据恢复为原始对象的过程,通常用于持久化数据或在网络间传输对象。在本文中,我们将探讨如何利用 Python 的反序列化机制来规避安全软件的检测,从而实现免杀(避免杀毒软件的检测...

    序列化和反序列化dll文件和proto

    用户可以编写.proto文件,定义消息类型,然后编译成各种目标语言(如C++、Java或Python)的类,这些类可以用于序列化和反序列化数据。 在处理Proto文件时,序列化意味着将根据.proto文件定义的消息实例转换为二进制...

    Python调用序列化数据工具Protocol Buffers——protobuf

    2. **编译器**: 使用protobuf编译器将`.proto`文件转换为特定语言(如Python、Java、C++)的源代码,生成的数据结构包含序列化和反序列化的方法。 3. **序列化与反序列化**: 序列化是将结构化数据转换为二进制流的...

    Protocol buffers 反序列化 一键protoc反序列化

    编译器protoc会根据.proto文件生成对应语言(如C++、Java、Python)的源代码,这些源代码包含了对消息进行序列化和反序列化的函数。 3. **16进制与protobuf反序列化**: 当数据以16进制字符串的形式存在时,需要先...

    浅析Python 序列化与反序列化

    ### 浅析Python序列化与反序列化 在软件开发领域,序列化和反序列化是数据处理过程中不可或缺的一部分。序列化是指将程序中的对象转换为可以存储或传输的格式的过程;而反序列化则是相反的过程,即把存储或传输后的...

    Json序列化与反序列化

    3. **性能优化**:大量数据的序列化和反序列化可能影响性能,对于性能敏感的场景,可以考虑使用更高效的序列化库或压缩数据。 4. **嵌套层级**:JSON支持嵌套结构,但过深的嵌套可能导致解析困难或内存消耗过大。 ...

    序列化和反序列化(文本加密成二进制文件)

    在IT领域,序列化和反序列化是两个关键概念,主要应用于数据持久化、网络通信以及对象存储等场景。序列化是指将一个对象的状态转换为可存储或传输的形式,通常是二进制流;反序列化则相反,是将这个二进制流恢复为...

    Python-dillPython的扩展序列化反序列化模块

    Python的dill模块是Python标准库pickle模块的一个扩展,提供了更强大的序列化和反序列化功能。pickle模块主要用于将Python对象转化为字节流(序列化),以便存储或通过网络传输,然后可以恢复这些对象(反序列化)。...

    shiro反序列化脚本.zip

    Python脚本可以方便地与Java环境交互,例如通过网络发送序列化数据,触发Shiro框架中的漏洞。 在标签中提到的"反射"是Java编程中的一个重要概念,它允许程序在运行时检查类、接口、字段和方法的信息,并能动态调用...

    Python之序列化共8页.pdf.zip

    Python之序列化是编程中的一个重要概念,特别是在数据存储、网络通信和对象持久化等场景下。序列化是指将数据结构或对象转化为可传输或存储的格式,而反序列化则是相反的过程,即从序列化的数据中恢复原来的对象。在...

    详解Python 序列化Serialize 和 反序列化Deserialize

    详解Python 序列化Serialize 和 反序列化Deserialize 序列化 (serialization) 序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化, 它将流转换为对象。这两个过程结合起来,可以轻松地...

    系列化和反序列化的一个文砀

    在IT行业中,序列化和反序列化是两个关键的概念,特别是在数据存储、网络通信和对象持久化等场景中。它们是计算机科学中的重要技术,帮助我们处理和传递数据。 序列化是指将对象的状态转化为可存储或可传输的形式,...

    python3序列化与反序列化用法实例

    ### Python3 序列化与反序列化详解 在Python编程中,序列化与反序列化是处理数据存储和传输的重要技术手段。本篇文章将深入介绍Python3中序列化与反序列化的用法,并通过实例详细讲解如何使用`pickle`模块进行字符...

    Python Json序列化与反序列化的示例

    ### Python Json序列化与反序列化的详尽解析 #### 一、引言 在现代软件开发中,数据交换是不可避免的。特别是在不同编程语言之间共享数据时,需要一种通用的数据格式来确保数据的一致性和互操作性。JSON...

    Python-Cista是一个开源的简单C序列化反序列化库

    在Python世界中,序列化通常用于将数据结构转化为可存储或传输的格式,而反序列化则是将这些格式恢复为原始的数据结构。Cista库的出现为C程序员提供了类似的功能,使得在C语言环境中处理数据变得更加便捷。 Cista库...

    序列化和反序列化

    在Java、Python、C#等编程语言中,序列化是指将对象的状态转换为可存储或传输的数据格式的过程,而反序列化则是这个过程的逆操作,即从这些数据格式恢复原来的对象状态。 在Java中,序列化主要通过实现`java.io....

    pyxser:Python XML序列化

    它还使用相互递归函数对对象树进行序列化和反序列化,但是它具有一些功能,例如depth参数,该参数允许您在特定点停止对对象树的序列化或反序列化。 pyxser模块是自我记录的,如果您想看一下文档,只需运行pydoc ...

    反序列化和序列

    2. 使用不同的序列化库(如pickle和json)对比Python对象的序列化和反序列化效果。 3. 考虑安全问题,编写一个防范反序列化攻击的示例。 4. 探索如何处理序列化过程中的循环引用问题。 5. 比较XML、JSON和protobuf三...

Global site tag (gtag.js) - Google Analytics