如何在Python中自动检查函数参数的列表长度并给出提示?
实现函数参数长度检查并给出提示
给你几种实用的实现方式,能在调用time_between_pulses_checking函数时,对channels参数的长度做校验并给出明确提示:
方法一:用断言快速校验
断言是Python里简单直接的参数校验方式,条件不满足时会抛出AssertionError,同时带出你定义的提示:
def time_between_pulses_checking(self, channels: list, max_time_difference: float, active_pulse_level: int = 0) -> tuple: # 检查channels长度,不够就抛提示 assert len(channels) >= 2, "传入的列表过短,channels参数至少得有2个元素" # 这里写后续的函数逻辑
不过要注意,断言可以通过Python的-O运行参数禁用,所以如果这是必须的校验逻辑,更推荐用下面的方法。
方法二:抛自定义异常(更严谨)
如果想确保校验逻辑一定会执行,不会被禁用,直接手动抛出ValueError就行:
def time_between_pulses_checking(self, channels: list, max_time_difference: float, active_pulse_level: int = 0) -> tuple: if len(channels) < 2: raise ValueError("传入的列表过短,channels参数至少得有2个元素") # 后续函数逻辑...
这种方式不管有没有开优化模式,都会触发校验,抛出的错误提示清晰,适合作为强制的参数检查。
方法三:编码阶段提前提示(静态检查)
要是想在写代码的时候就提前发现问题,可以配合类型检查工具(比如mypy),给参数加上更明确的类型提示:
from typing import List, TypeVar T = TypeVar('T') # 用来定义列表元素的通用类型 def time_between_pulses_checking(self, channels: List[T], max_time_difference: float, active_pulse_level: int = 0) -> tuple: if len(channels) < 2: raise ValueError("传入的列表过短,channels参数至少得有2个元素") # 后续函数逻辑...
搭配mypy这类工具,编写代码时就能收到长度不符合要求的提示,但运行时还是得靠上面的动态校验来保障。
内容的提问来源于stack exchange,提问作者Jkozdoncher
相关产品推荐
相关产品推荐

