解决got an unexpected keyword argument ‘pk‘

本文讲述了在使用Django Rest Framework时遇到的retry方法TypeError问题,问题源于URL参数与方法调用不匹配。作者通过实例和代码修改展示了如何修正这一错误,重点在于理解get_object()和带有id参数的URL之间的关系。
  File "/usr/local/lib/python2.7/site-packages/djangorestframework-3.3.3-py2.7.egg/rest_framework/views.py", line 463, in dispatch
    response = handler(request, *args, **kwargs)
TypeError: retry() got an unexpected keyword argument 'pk'

具体报错信息如上,确定我代码中的报错位置是 retry() 方法,具体内容如下:

@detail_route(methods=['post'])
def retry(self, request):
    recover_obj = self.get_object()

此方法的url里,带有id参数,提交的内容是空的。但当执行 get_object() 的时候,因取不到pk而报错,所以修改如下:

def retry(self, request, *args, **kwargs):
参考提供的引用内容,未提及getaddrinfo()函数出现‘got an unexpected keyword argument’错误的相关解决办法。不过,该错误通常是由于调用函数时使用了函数定义中未声明的关键字参数导致的。 `getaddrinfo()` 函数的标准调用形式为: ```python import socket # 示例调用 try: result = socket.getaddrinfo(host, port, family=0, type=0, proto=0, flags=0) except socket.gaierror as e: # 对于getaddrinfo出错,需要通过gai_strerror转换错误码为错误消息 error_msg = socket.gai_strerror(e.errno) print(f"getaddrinfo error: {error_msg}") ``` 解决got an unexpected keyword argument’错误,需要检查调用 `getaddrinfo()` 函数时传入的参数,确保没有使用未定义的关键字参数。要严格按照 `getaddrinfo()` 函数的参数定义来传递参数,其参数定义如下: - `host`:目标主机的主机名或 IP 地址。 - `port`:目标端口号,可以是整数或字符串。 - `family`:可选参数,指定地址族(如 `socket.AF_INET`、`socket.AF_INET6` 等),默认值为 0 表示自动选择。 - `type`:可选参数,指定套接字类型(如 `socket.SOCK_STREAM`、`socket.SOCK_DGRAM` 等),默认值为 0 表示自动选择。 - `proto`:可选参数,指定协议(如 `socket.IPPROTO_TCP`、`socket.IPPROTO_UDP` 等),默认值为 0 表示自动选择。 - `flags`:可选参数,指定额外的标志,默认值为 0。 若调用时出现该错误,要检查代码里是否有类似如下错误调用: ```python import socket # 错误调用示例,使用了未定义的关键字参数 'invalid_param' try: result = socket.getaddrinfo('example.com', 80, invalid_param='value') except TypeError as e: print(f"TypeError: {e}") ``` 在这个错误示例中,`invalid_param` 是未定义的关键字参数,会引发‘got an unexpected keyword argument’错误。要修正这个问题,需移除未定义的关键字参数: ```python import socket # 正确调用示例 try: result = socket.getaddrinfo('example.com', 80) for res in result: print(res) except socket.gaierror as e: error_msg = socket.gai_strerror(e.errno) print(f"getaddrinfo error: {error_msg}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值