You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:15:40