Python中的自定义HTTP异常

问题描述 投票:1回答:1

我想制作一个python脚本来自动执行与JIRA类似的票证响应。为此,我正在使用json和请求库。由于有时HTTP请求可能非常不可靠,因此我想让脚本在HTTP请求失败时重试HTTP请求。到目前为止,我有这个:

def openNewTicket(queueID, subject, content):
    post_url = "{}/ticket/".format(default_url)
    #Filling body OBJ
    myObj = { "ContentType": "text/plain",
              "Subject" : subject,
              "Content": content,
              "Queue": queueID,
              "CustomFields": { "33": "alarm", "26": "yes", "24": "technical incident" }
            }
    #Formatting obj to json
    jsonBody = json.dumps(myObj)
    print jsonBody
    try:
        response = requests.post(post_url, data=jsonBody, headers=authorization_header))
        date = datetime.datetime.now()
        writeLog("{} - Created ticket {}\n".format(date, response['id']))
        rocketChat.sendChatMessage("modem", "Sucessfully created ticket {}".format(response['id']))
        return 0
    except Exception:
        time.sleep(1)
        return openNewTicket(queueID, subject, content)

问题是:由于某种原因,当我得到201状态代码(已创建)时,它被视为异常并再次进行迭代。有什么办法可以告诉python 201状态代码不是异常吗?

python http post python-requests
1个回答
0
投票

[Requests确实not在201状态代码上引发错误(甚至不在404上),这是一个示例。

import requests

response = requests.post(
    'https://reqres.in/api/users', 
    data={'name': 'test', 'salary': '123', 'age': '23'}
)

print(response.status_code)

# 201

但是似乎您的范围太宽泛的例外条款(except Exception)就是这里的问题,它捕获了所有内容,因此您在这里不知道造成此例外的原因是什么。您应该抓住ConnectionError之类的真正惊喜。

很确定这里的问题是带有)的行,不应存在。:requests.post(post_url, data=jsonBody, headers=authorization_header))

© www.soinside.com 2019 - 2024. All rights reserved.