почему мои попытки и кроме проверки не работают при проверке моего сетевого кода?

Я пытаюсь написать некоторый код, чтобы выдать ошибку, когда модуль запросов не может правильно вытащить html с веб-сайта, проверив, что сетевой код равен 200. как я написал ниже (если я правильно понимаю ), если применим параметр «кроме», он ничего не запустит с параметром «попробовать» (в случае печати оператора успеха). вы увидите, если вы запустите этот print status, вернете none, и, несмотря на выполнение параметра «кроме», будет выполнена строка печати «try». где я ошибаюсь?

#import modules
import bs4, requests, pyperclip, re

#designate the website
website = "https://grocery.walmart.com/browse/Fresh-Fruit?=&Vegetables_CP_Cat_Anchor_Fresh_Fruit=&aisle=1255027787131_1255027788181&page=1&povid=1255027787131%20%7C%20contentZone3%20%7C%202019-05-29%20%7C%201%20%7C%20Fruits&"
# website = "https://amazon.com/Automate-Boring-Stuff-Python-2nd-ebook/dp/B07VSXS4NK/ref=sr_1_1?dchild=1&keywords=automate+the+boring+stuff&qid=1586981494&sr=8-1"

#pull the html from the website
#checks for net code to verify the html pulled correctly

siteHTML = requests.get(website)
status = siteHTML.raise_for_status()
print(status)
try:
        print("HTML request attempt successful!",)
except status != "<bound method Response.raise_for_status of <Response [200]>>":
    #searches for the net code using regular expression
    codeRegex = re.compile(r'(\d){3}')
    code = codeRegex.search(status)
    print("requests attempt unsuccessful. received net code %s",code.group(0))

person Jonathan-Zollinger    schedule 16.04.2020    source источник
comment
Вы использовали try.. except неправильно. Таким образом, try должен содержать блок кода, который потенциально может вызвать исключение, а except перехватит эту ошибку и выполнит написанный в ней код.   -  person tidakdiinginkan    schedule 16.04.2020
comment
Спасибо, Кэлвин, я посмотрю на это подробнее и перепишу свои попытки и исключения.   -  person Jonathan-Zollinger    schedule 16.04.2020


Ответы (1)


raise_for_status() вызовет ошибку, если статус не 2xx. Это ошибка, которую вам нужно поймать, поэтому эта функция должна быть в блоке try. Затем вы можете поймать HTTPError, возникающий в результате неправильного запроса. Что-то типа:

siteHTML = requests.get("http://example.com/badPath")

try:
    siteHTML.raise_for_status()
    print("success")
except requests.HTTPError as err:
    print(err)

Отпечатки:

404 Client Error: Not Found for url: http://example.com/badPath
person Mark    schedule 16.04.2020
comment
спасибо! вы ответили на другой вопрос, который у меня был о статусах, отличных от 2xx, которые возвращаются как ошибки. Я ценю обратную связь и аргументацию, если у меня есть еще вопросы / мне нужны дополнительные разъяснения, я свяжусь с вами. еще раз спасибо! - person Jonathan-Zollinger; 16.04.2020