32 lines
1.5 KiB
Python
32 lines
1.5 KiB
Python
import inspect
|
|
from typing import List, Dict, Any, Type
|
|
|
|
class ParameterValidationMixin:
|
|
def validate_and_convert_params(self, params: List[Any], param_type: Dict[str, Type]) -> Dict[str, Any]:
|
|
'''将参数列表 params 根据 param_type 转换为参数字典。
|
|
'''
|
|
result = {}
|
|
for i, (param_name, param_type_or_default_val) in enumerate(param_type.items()):
|
|
if i >= len(params):
|
|
if isinstance(param_type_or_default_val, Type) or param_type_or_default_val is inspect.Parameter.empty:
|
|
# 是类型
|
|
raise ValueError(f"参数 {param_name} 缺失")
|
|
else:
|
|
# 是默认值
|
|
result[param_name] = param_type_or_default_val
|
|
else:
|
|
# 尝试强制转换
|
|
try:
|
|
if param_type_or_default_val is None:
|
|
if params[i].isdigit():
|
|
result[param_name] = int(params[i])
|
|
else:
|
|
result[param_name] = params[i]
|
|
elif isinstance(param_type_or_default_val, str):
|
|
# 如果 param_type_or_default_val 是字符串,直接赋值
|
|
result[param_name] = params[i]
|
|
else:
|
|
result[param_name] = param_type_or_default_val(params[i])
|
|
except ValueError:
|
|
raise ValueError(f"参数 {param_name} 类型错误")
|
|
return result |