Мне все еще трудно узнать, когда и как использовать исключения в python.В настоящее время я использую запросы для получения контента по ссылке, иногда мне нужно использовать http auth:
if auth_is_needed:
resp = requests.get(url, auth=(auth['user'], auth['password']))
else:
resp = requests.get(url)
1) Я мог бы просто потом выполнить простой if / else для проверки кода состояния:
if resp.status_code not 200:
print('Could not fetch content from the url')
2) Я также мог бы выдвинуть здесь исключение, например:
if resp.status_code not 200:
print('Could not fetch content from the url')
raise Exception('for the url was returned a wrong status code')
3) Но я думаю, я должен сделать это с помощью try / catch.Но тогда, я должен сделать это два раза как:
if auth_is_needed:
try:
resp = requests.get(url, auth=(auth['user'], auth['password']))
resp.raise_for_status()
except requests.exceptions.HTTPError as error:
print(error)
else:
try:
resp = requests.get(url)
resp.raise_for_status()
except requests.exceptions.HTTPError as error:
print(error)
4) Или я должен поместить все в один блок, как:
try:
if auth_is_needed:
resp = requests.get(url, auth=(auth['user'], auth['password']))
else:
resp = requests.get(url)
except requests.exceptions.HTTPError as error:
print(error)
Итак, почему 1) и 2)плохой?Они выглядят намного проще.И разве это не плохой стиль - помещать много кода в блок try, как в 4)?Но должен ли я действительно повторить то же самое, что и в 3)?