Python 泡菜问题

Python Pickle Issue

我们给出了一个任务,我们为此编写了下面的代码,在执行它时显示错误。因此 pickle 中的问题需要帮助。请让我们知道我们在编码中哪里出错了-

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 运行良好,这似乎是我们得到一些输出的原因。我们还附上​​了问题陈述的图片,即我们需要在不同的功能中执行的操作。

请指出我们哪里出错了。

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

在func2中,写入 x=restricted_loads(pickle.dumps(切片(s)))

#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)