如何确保函数的输入在选项列表内?

问题描述 投票:0回答:1

我想定义一个函数的可能输入列表,类似于枚举。该应用程序用于http请求,我想为请求创建一个包装器来处理错误。包装器将需要请求类型参数,get、put、delete 等。确保请求类型是合法输入的最佳方法是什么?

这是我已经尝试过的代码。回复是

请求类型:request_type_library.request_type 未知的请求类型。默认获取。有效请求类型:{: ['GET', 'PUT', 'DELETE']}

import requests
from enum import Enum, auto

class RequestTypeLibrary(Enum):
    request_type = auto()

request_type_dictionary = {RequestTypeLibrary.request_type: ["GET","PUT","DELETE"]}

class RequestTypeLoader:
    def __init__(self, request_type: RequestTypeLibrary):
        self.request_type = request_type

    def load_request_type(self):
        print(f"loaded request type: {request_type_dictionary[self.request_type]}")

def request_wrapper(request_type: RequestTypeLibrary,url,timeout=10):
    print("request type:", request_type)
    if request_type=="GET":
        r= requests.get(url,timeout=timeout)
    elif request_type=="PUT":
        r= requests.put(url,timeout=timeout)
    elif request_type=="DELETE":
        r= requests.delete(url,timeout=timeout)
    else:
        r= requests.get(url,timeout=timeout)
        print("Uknown request type. Defaulted to get. Valid Request types: ", request_type_dictionary)
    return r

r = request_wrapper(request_type=RequestTypeLibrary.request_type,url=url,timeout=10,)
python function parameters enums standards
1个回答
0
投票

确保请求类型是合法输入的最佳方法是什么?

因此创建枚举状态。

import enum
class RequestType(enum.StrEnum):
  GET = enum.auto()
  POST = enum.auto()
  PUT = enum.auto()
  DELETE = enum.auto()

您可以断言该值是合理的。一些东西,未经测试。

def request_wrapper(request_type: RequestType, ...):
     assert isinstance(request_type, RequestType)
© www.soinside.com 2019 - 2024. All rights reserved.