try:
r = requests.get(url, params={'s': thing})
except requests.ConnectionError, e:
print e #should I also sys.exit(1) after this?
Isso está correto? Existe uma maneira melhor de estruturar isso? Isso cobrirá todas as minhas bases?
python
request
python-requests
John Smith
fonte
fonte
Respostas:
Dê uma olhada nos documentos de exceção Solicitações . Em resumo:
Para responder sua pergunta, o que você mostrar não cobrirá todas as suas bases. Você detectará apenas erros relacionados à conexão, não aqueles que atingem o tempo limite.
O que fazer quando você capturar a exceção depende realmente do design do seu script / programa. É aceitável sair? Você pode continuar e tentar novamente? Se o erro for catastrófico e você não puder continuar, sim, você pode abortar seu programa aumentando SystemExit (uma boa maneira de imprimir um erro e chamar
sys.exit
).Você pode capturar a exceção de classe base, que tratará de todos os casos:
Ou você pode pegá-los separadamente e fazer coisas diferentes.
Como cristão apontou:
Um exemplo:
Irá imprimir:
fonte
socket.timeout
exceções se estiver usando um tempo limite: github.com/kennethreitz/requests/issues/1236Uma sugestão adicional a ser explícita. Parece melhor ir de específico para geral na pilha de erros para obter o erro desejado, para que os específicos não sejam mascarados pelo geral.
vs
fonte
O objeto de exceção também contém resposta original
e.response
, que pode ser útil se for necessário ver o corpo do erro em resposta do servidor. Por exemplo:fonte