首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Pickle问题

Python Pickle问题
EN

Stack Overflow用户
提问于 2020-09-27 14:11:13
回答 2查看 1.1K关注 0票数 1

我们给出了一个任务,并在执行任务时显示了一个错误,并编写了下面的代码。因此在泡菜问题上需要帮助。请告诉我们编码出了什么问题-

代码语言:javascript
复制
import os
import builtins
import pickle
import sys
sys.tracebacklimit=0
import traceback
import io
from logging import Logger

safe_builtins = {
        'range',
        'complex',
        'set',
        'frozenset',
        }

class RestrictedUnpickler(pickle.Unpickler):

      def find_class(self, module, name):
      # Only allow safe classes from builtins.
       if module == "builtins" and name in safe_builtins:
           return getattr(builtins, name)
        # Forbid everything else.
       raise pickle.UnpicklingError("global '%s.%s' is forbidden" %
       (module, name))
    
    def restricted_loads(s):
        """Helper function analogous to pickle.loads()."""
        return RestrictedUnpickler(io.BytesIO(s)).load()
    
    def func1(a): 
      try: 
        x= restricted_loads(pickle.dumps(a))
          return x 
            except pickle.UnpicklingError : 
      s=traceback.format_exc()
         return s
    
    
    def func2(s):
      try:
        x=restricted_loads(pickle.dumps(s))
        return s[x]
      except pickle.UnpicklingError :
 s=traceback.format_exc()
        return s
    
       
    if __name__ == "__main__":
        a=range(int(input())) 
        b=func1(a)
        print(b)
        y=tuple(input())
        z=func2(y)
        print(z)

我们假设问题是函数2,我们没有得到正确的输出。函数1工作得很好,这似乎是我们得到一些输出的原因。我们还为问题陈述附加了一个图像,即我们需要在不同的功能中执行什么。

请建议我们哪里出了问题。

代码语言:javascript
复制
TypeError: tuple indices must be integers or slices, not tuple

Input (stdin)
50 
"a", "b", "c", "d", "e", "f", "g", "h"

Your Output (stdout) 
range(0, 50)

Expected Output 
range(0, 50) 
Traceback (most recent call last): 
_pickle.UnpicklingError: global 'builtins.slice' is forbidden

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-06 07:01:49

代码语言:javascript
复制
#frescoplay pickle problem 
import os
import builtins
import pickle
import sys
sys.tracebacklimit=0
import traceback
import io
from logging import Logger

safe_builtins = {
        'range',
        'complex',
        'set',
        'frozenset',
        }

class RestrictedUnpickler(pickle.Unpickler):

   def find_class(self, module, name):
    # Only allow safe classes from builtins.
      if module == "builtins" and name in safe_builtins:
          return getattr(builtins, name)
    # Forbid everything else.
      raise pickle.UnpicklingError("global '%s.%s' is forbidden" %
      (module, name))
        
        

def restricted_loads(s):
        """Helper function analogous to pickle.loads()."""
        return RestrictedUnpickler(io.BytesIO(s)).load()

def func1(a): 
    try: 
        x= restricted_loads(pickle.dumps(a))
        return x 
    except pickle.UnpicklingError : 
        s=traceback.format_exc()
        return s
    
    
def func2(s):
    try:
        x=restricted_loads(pickle.dumps(slice(s)))
        return s[x]
    except pickle.UnpicklingError :
        s=traceback.format_exc()
        return s

    
if __name__ == "__main__":
       a=range(int(input`enter code here`())) 
       b=func1(a)
       print(b)
       y=tuple(input())
       z=func2(y)
       print(z)
票数 0
EN

Stack Overflow用户

发布于 2020-12-31 11:42:04

在func2中,编写x=restricted_loads(pickle.dumps(片))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64089371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档