gpt4 book ai didi

python - 如何限制可以传递给方法参数的允许值(使用类型提示允许静态代码分析)

转载 作者:太空宇宙 更新时间:2023-11-04 07:50:16 25 4
gpt4 key购买 nike

在 Python 3 中,我想限制传递给此方法的允许值:

my_request(protocol_type, url)

使用类型提示我可以写:

my_request(protocol_type: str, url: str)

所以协议(protocol)和 url 仅限于字符串,但我如何验证 protocol_type 只接受有限的一组值,例如'http''https'?

最佳答案

一种方法是在方法中编写代码来验证传入的值是“http”还是“https”,如下所示:

if (protocol_type == 'http') or (protocol_type == 'https'):
Do Something
else:
Throw an exception

这会在运行时正常工作,但不会在编写代码时提供问题指示。

这就是为什么我更喜欢使用 Enum 以及 Pycharm 和 mypy 实现的类型提示机制。

对于下面的代码示例,您将在 Pycharm 的代码检查中收到警告,请参阅随附的屏幕截图。屏幕截图显示,如果您输入的值不是枚举,您将收到“预期类型:...”警告。

代码:

"""Test of ENUM"""

from enum import Enum


class ProtocolEnum(Enum):
"""
ENUM to hold the allowed values for protocol
"""
HTTP: str = 'http'
HTTPS: str = 'https'


def try_protocol_enum(protocol: ProtocolEnum) -> None:
"""
Test of ProtocolEnum
:rtype: None
:param protocol: a ProtocolEnum value allows for HTTP or HTTPS only
:return:
"""
print(type(protocol))
print(protocol.value)
print(protocol.name)


try_protocol_enum(ProtocolEnum.HTTP)

try_protocol_enum('https')

输出:

<enum 'ProtocolEnum'>
http
HTTP

Warnings issued by Pycharm Static Code Analysis - Code Inspection

关于python - 如何限制可以传递给方法参数的允许值(使用类型提示允许静态代码分析),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55792215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com