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

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序列化反序列化和异常处理笔记.doc

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

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

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

    Json反序列化

    反序列化是将JSON格式的字符串转换为程序可直接使用的对象的过程,这对于处理网络请求返回的数据至关重要。在本篇文章中,我们将深入探讨JSON反序列化的概念、原因以及在实际开发中的应用。 一、什么是JSON反序列化...

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

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

    Python数据序列化与反序列化:掌握pickle模块

    pickle模块是Python中进行数据序列化和反序列化的有力工具。通过本文的介绍和代码示例,你应该能够理解pickle模块的基本概念和如何在Python中使用pickle模块进行数据的序列化和反序列化。这些工具和技术为数据持久化...

    protobuf序列化和反序列化技术

    protobuf序列化和反序列化技术是大数据处理领域中不可或缺的一部分,尤其在实时大数据场景下,高效的数据传输和存储对性能有着直接影响。谷歌推出的Protocol Buffers(简称protobuf)是一种语言无关、平台无关的数据...

    第38天:WEB漏洞-反序列化之PHP&JAVA全解(下)1

    0x05部分,攻击者设置了一个监听器等待反序列化数据的触发,通过向服务器发送特定的数据包,触发反序列化过程,进而执行预设的命令(如curl命令),获取flag。 总结来说,这个主题涵盖了Web安全中的关键概念,包括...

    浅析Python 序列化与反序列化

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

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

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

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

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

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

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

    序列化和反序列化doc文档.rar

    序列化和反序列化是计算机科学中的重要概念,特别是在数据传输、持久化存储以及跨进程通信等场景中扮演着核心角色。在这个主题中,我们将深入探讨序列化和反序列化的概念,它们的工作原理,以及在实际应用中的选择...

    Python中shelve序列化与反序列化

    序列化/反序列化 将对象转换为可通过网络传输或可以存储到本地磁盘的数据格式(如:XML、JSON或特定格式的字节串)的过程称为序列化;反之,则称为反序列化 shelve shelve是一个简单的数据存储方案,类似key-value...

    Python pickle类库介绍(对象序列化和反序列化)

    pickle模块用来实现python对象的序列化和反序列化。通常地pickle将python对象序列化为二进制流或文件。   python对象与文件之间的序列化和反序列化: 复制代码 代码如下: pickle.dump() pickle.load() 如果要实现...

    Python使用pickle进行序列化和反序列化的示例代码

    Python的pickle库是一个强大的工具,用于对象的序列化和反序列化。序列化是将Python对象转换为字节流的过程,而反序列化则是将字节流恢复为原来的Python对象。这个过程允许我们将复杂的对象结构保存到文件或通过网络...

    Python实现的序列化和反序列化二叉树算法示例

    本文实例讲述了Python实现的序列化和反序列化二叉树算法。分享给大家供大家参考,具体如下: 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 序列化二叉树 先序遍历二叉树 def recursionSerialize(self...

    python反编译工具 Easy Python Decompiler

    例如,uncompyle6支持Python 2.4到3.7的字节码反编译,而pycde则更注重代码的可读性和格式化。 在实际开发中,理解如何使用这些反编译工具是很有价值的,尤其是在进行逆向工程、调试或审计Python代码时。同时,也...

    Python时间序列分析数据集

    用于进行Python时间序列分析的数据集,包含苹果、微软等公司自1990年以来每天的股票价格数据,共5473条,可以用作做时间序列分析。

    bran:用于确定性DER编码的ASN.1序列化和反序列化的Python模块

    Bran提供用于序列化和反序列化以及编码的代码转换器。 目的是为本机Python类型(例如嵌套字典)提供序列化格式,其序列化是明确且稳定的。 那就是两个具有相同内容的值序列化到相同的字节字符串。 这样就可以创建...

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

    本文实例讲述了python3序列化与反序列化用法。分享给大家供大家参考。具体如下: #coding=utf-8 import pickle aa={} aa["title"]="我是好人" aa["num"]=2 t=pickle.dumps(aa)#序列化这个字典 print(t) f=pickle....

Global site tag (gtag.js) - Google Analytics