繁体   English   中英

Python 请求响应 - 如果 elif 条件不起作用

[英]Python request response - if elif condition not working

嗨,我的代码在 if else json 响应时遇到问题,我很确定我正在做正确的方法,但代码不会在 else 语句中继续。

import requests
import psycopg2
        conn = psycopg2.connect(dbname='databasename',user='postgres',password='12345',host='x.x.x.x', port='xxxx') # works correctly
        print('success db')
        cur = conn.cursor()

        cur.execute("SELECT mobile_number FROM users WHERE status='ACTIVE'") # this is my query 
        conn.commit();
        row_count = cur.rowcount
        print('This is the number of rows: ', row_count)
        result = [mobileNum[0] for mobileNum in cur.fetchall()]

        for mobileNum in result:
            print('Current Number: ', mobileNum)
            pushnotif = push_notif(mobileNum) # This is a function for http request
            
            if pushnotif['success'] == 1 and pushnotif['failure'] == 0 : # This line of code is working and continue the for loop
                print('Success!!!')
            elif pushnotif['success'] == 0 and pushnotif['failure'] == 1: # This line of code is working but only when I'm printing a sentence like faileedddd!
                print(pushnotif['results']['error']) # This doesn't print the result error on http response and exits the for loop
            elif pushnotif['message'] == "Invalid number": # This line doesn't work and end the for loops
                print(pushnotif['message'])
            else: # The code doesn't go here whenever the response is not 200 OK or push_notif['message'] or push_notif['results''error']
                print('error')

以下是响应示例:

{
    "multicast_id": xxx,
    "success": 1,
    "failure": 0,
    "canonical_ids": 0,
    "results": [
        {
            "message_id": "xxx"
        }
    ]
}

或者

{
    "multicast_id": xxxx,
    "success": 0,
    "failure": 1,
    "canonical_ids": 0,
    "results": [
        {
            "error": "invalid"
        }
    ]
}

或者

{
    "message": "Invalid number"
}

我不确定 function push_notif返回什么,但如果它返回常规dict ,这可能是一个问题,因为您假设字典中存在键(success, failure and result) ,但情况并非如此您提供的最后一个响应示例。 所以通常一个异常会引发并停止你的程序,或者至少如果被捕获,会结束 for 循环并退出 function。

例如,假设您最初得到以下响应。

{
    "message": "Invalid number"
}

在这里,您的字典只有一个名为message的键。因此,当您使用诸如successfailure之类的键检查响应时,您的程序将停止执行,因为这些键不存在于您当前的响应中,并且您的 else 语句将永远不会执行。

pushnotif = push_notif(mobileNum)
pushlen = len(pushnotif)

if pushlen == 5:
     print("This will print if API response is equal to 5", pushnotif)
elif pushlen == 1:
     print("This will print if API response is equal to 1", pushnotif)
else:
     print("This will print unexpected response", pushnotif)

这是逻辑再次感谢您!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM