通过接口查询几条数据返回“code”值为200的查询成功,返回其它值的查询失败,然后在代码里做了if语句判断是否返回“200”,但是调试的时候发现有一部分数据查询返回了code值是200,但是在判断语句中会被判断为查询失败,请高手指导一下该如何处理?

操作系统WIN10 专业版,使用的是python3.12.2版本,写代码的工具是PyCharm 2023.3.4 (Professional Edition)

代码(片段)如下:

response = requests.request("POST", api_url, data=payload, headers=headers)
        query_results = []
        query_results.append(response.json())
        response_data = response.json()
        print(response_data)
        code_data = (response_data.get("code", ""))
        msg_data = str(response_data.get("msg", ""))
        a1 = response_data.get("data", 0)
        print(code_data, msg_data, a1)
        try:
            if code_data == 200 or msg_data == "success":
                # 解析响应数据,获取快递公司、单号、状态描述、查询结果
                nu_data = response_data.get("data", {}).get("nu", "")
                com_data = response_data.get("data", {}).get("com", "")
                company_name = couriers_data[couriers_data['nickname'] == com_data]['name'].iloc[0]
                status_desc_data = response_data.get("data", {}).get("status_desc", "")
                content_value = [item['content'] for item in response_data['data']['info'] if "揽收" in item['content']]

                result_text.insert("end", f"{nu_data},{company_name},{status_desc_data},{content_value}\n")
                # 在将结果插入result_text后更新express_data列表
                update_express_data()
            else:
                # 处理 API 调用失败情况
                result_text.insert("end", f"错误提示: {number} ,{code_data},{response_data.get('msg', '未知错误')}\n")
                # 在将结果插入result_text后更新express_data列表
                update_express_data()

            index += 1
            # 递归调用,查询下一个单号
            root.after(1000, query_one_tracking_number, tracking_numbers, index)
            # 延迟1秒后再次调用,以防止请求过于频繁导致 IP 被禁止访问
        except Exception as e:
            # 处理异常情况
            result_text.insert("end", f"错误提示: {number} ,{response.status_code},{"该单号无法查询,请检查单号是否正确,或不支持该快递公司"}\n")
            # 在将结果插入result_text后更新express_data列表
            update_express_data()

            index += 1
            root.after(1000, query_one_tracking_number, tracking_numbers, index)

其中code_data = (response_data.get(“code”, “”))
语句曾经强制将获取的值改为str或int类型
code_data = str(response_data.get(“code”, “”))
code_data = int(response_data.get(“code”, “”))

if code_data == 200 or msg_data == “success”:语句曾经改为
if “200” in code_data:
if a1 is not None:
反复调试过很多次,以下是调试结果的截图

ems和急兔返回的code值和msg的值和其它都是一样的,但是判断的时候就一直就判断为异常,有高手能帮忙分析一下这个问题是什么原因造成的吗?非常感谢!

Jason990420
最佳答案

该单号无法查询,请检查单号是否正确,或不支持该快递公司

问题应该是出现异常, 先移除try...except, 确认是哪一行出了什么错 ?

有可能是这两行, 查询错误所造成的.

company_name = couriers_data[couriers_data['nickname'] == com_data]['name'].iloc[0]
content_value = [item['content'] for item in response_data['data']['info'] if "揽收" in item['content']]

建议再加条件来筛选问题, 而不是使用try...except来避过问题.

1个月前 评论
aka19801030 (楼主) 1个月前
讨论数量: 4

你的问题不是200问题,而是进入到200后取数据报的异常,你把异常打印出来看下是什么问题。
不是200提示该是这个: 错误提示:

1个月前 评论
Jason990420

该单号无法查询,请检查单号是否正确,或不支持该快递公司

问题应该是出现异常, 先移除try...except, 确认是哪一行出了什么错 ?

有可能是这两行, 查询错误所造成的.

company_name = couriers_data[couriers_data['nickname'] == com_data]['name'].iloc[0]
content_value = [item['content'] for item in response_data['data']['info'] if "揽收" in item['content']]

建议再加条件来筛选问题, 而不是使用try...except来避过问题.

1个月前 评论
aka19801030 (楼主) 1个月前

把异常信息打印出来就知道什么问题

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!