调用Services.get_settlement_postoffices()报TypeError:缺少必填参数settlement
问题解决方案
错误原因
- 必填参数未传入:
get_settlement_postoffices方法的settlement参数没有默认值,属于必填项,调用时未传参导致TypeError。 - 客户端属性未初始化:
Services类中依赖self._client发起请求,但实例化类时未初始化该属性,补全参数后仍会触发新的错误。
修正后的完整代码
from __future__ import annotations from datetime import datetime import json from typing import TYPE_CHECKING, List, Optional, Union import requests from pochta.enums import PostofficeWorkType from pochta.utils import HTTPMethod class Services: def __init__(self): # 初始化请求客户端,若使用pochta官方库,替换为对应客户端初始化逻辑 # 示例:from pochta import APIClient; self._client = APIClient(api_key='你的API密钥') self._client = requests.Session() def get_settlement_postoffices(self, settlement: str, region: Optional[str] = None, district: Optional[str] = None) -> List[str]: # 拼接完整API地址,基础域名根据pochta官方文档调整 base_url = 'https://otpravka.pochta.ru/api/v1' url = f'{base_url}/postoffice/1.0/settlement.offices.codes' params = { 'settlement': settlement, 'region': region, 'district': district, } # 发起GET请求,转换HTTPMethod枚举为字符串 response = self._client.request(HTTPMethod.GET.value, url, params=params) response.raise_for_status() # 捕获HTTP请求错误 return response.json() # 实例化并传入必填的settlement参数 service = Services() # 替换为你要查询的城镇名称,支持俄文或指定语言的名称 print(service.get_settlement_postoffices(settlement="Москва"))
解决要点
- 调用
get_settlement_postoffices必须传入settlement参数,该参数指定要查询邮局的城镇名称。 - 在
Services类的__init__方法中初始化self._client,如果使用官方pochta库,需用APIClient并传入API密钥(需在邮政平台申请)。 - 原代码中的URL是相对路径,需拼接官方API的基础域名才能发起有效请求。
内容的提问来源于stack exchange,提问作者odo sd
相关产品推荐
相关产品推荐

