Пользовательские исключения HTTP в Python - PullRequest
1 голос
/ 19 марта 2020

Я хочу создать python сценарий для автоматизации ответов, подобных JIRA. Для этого я использую json и запрашивает библиотеку. Поскольку 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 код состояния не является исключением?

1 Ответ

0 голосов
/ 20 марта 2020

Requests не не вызывает ошибку в коде состояния 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))

...