python - 处理 Python 中可以 str 或 list 的函数参数

标签 python hug

我不是一个经验丰富的Python程序员,但我觉得我对这个问题的解决方案不对,我认为Python中有更好的方法来处理这个问题。

在本例中,使用 Hug API但这可能基本上是无关紧要的。

假设代码如下:

@hug.get_post('/hello')
def hello (name)
   print(type(name))
   return name

当使用 name 参数的一个实例发送请求时,hello 函数会获取一个 str - 如下所示:

POST /hello?name=Bob

但是,如果请求发送了多个 name 参数,则该方法会收到一个 list 字符串,如下所示

POST /hello?name=Bob&name=Sally

如果我编写如下方法:

@hug.get_post('/hello')
def hello (name: list)
   print(type(name))
   return name

然后单个参数就变成了字符列表。 IE。 ['B', 'o', 'b']。但如果 name 参数有多个实例(例如 ['Bob', 'Sally'] ),则效果很好

所以我现在解决这个问题的方法是添加以下代码:

@hug.get_post('/hello')
def hello (name)
   names=list()
   if type(name) != 'list'
      names.append(name)
   else:
      names=name
   return names

这可行,但感觉不对。我认为有更好的方法来做到这一点,但我目前无法弄清楚。

最佳答案

Hug 为此提供了一个类型:hug.types.multiple

import hug
from hug.types import multiple

@hug.get()
def hello(name: multiple):
    print(type(name))

    return name

现在 /hello?name=Bob 返回 ['Bob'] 并且 /hello?name=Bob&name=Sally 返回 ['鲍勃','莎莉']

如果您想验证内部元素,您可以创建一个自定义类型,如下所示:

import hug
from hug.types import Multiple, number

numbers = Multiple[number]()

@hug.get()
def hello(n: numbers):
    print(type(n))

    return n

在本例中 /hello?n=1&n=2 返回 [1, 2]/hello?n=1&n=a结果出现错误:

{"errors": {"n": "Invalid whole number provided"}}

关于python - 处理 Python 中可以 str 或 list 的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58703401/

相关文章:

Python Matplotlib : Drawing 2d line without sorting xdata

python - 具有现有 Python 安装的 Anaconda3

python - 如何删除表格行中显示的标题?

json - 我不明白服务器响应中 json 中的斜杠来自哪里

python - 用拥抱和女服务员记录

javascript - 在拥抱服务器中进行 CORS 咨询后,Vue.js 返回未定义的数据

python - 用元组替换程序中的列表?

python - 如何合并多个唯一id

python - 如何使用 python hug 获取请求 header

routing - 在拥抱服务器中传递类似字符串的路径