Ik probeer een API-test uit te voeren op een URL met Python, ik heb het volgende codeblok
def simple_get(url):
try:
page_response = requests.get(page_link, timeout=5)
if page_response.status_code == 200:
# extract
else:
print(page_response.status_code)
# notify, try again
except requests.Timeout as e:
print("It is time to timeout")
print(str(e))
except # other exception
Als ik het uitvoer, krijg ik de volgende foutmelding
File "<ipython-input-16-6291efcb97a0>", line 11
else:
^
IndentationError: expected an indented block
Ik begrijp niet waarom het notitieblok nog steeds om inspringing vraagt terwijl ik de “else”-instructie al heb laten inspringen
Antwoord 1, autoriteit 100%
Het probleem is dat je het programma niet hebt verteld wat het moet doen als aan de eerste voorwaarde is voldaan (if-statement). Als je niet zeker weet wat je moet doen als, kun je de ingebouwde ‘pass’ van python gebruiken.
if page_response.status_code == 200:
pass
else:
print(page_response.status_code)
Antwoord 2, autoriteit 100%
Dit is een heel basisconcept in Python
om te beginnen met coderen:
Regels die beginnen met #
worden binnen een codeblok genegeerd.
De code hier
if page_response.status_code == 200:
# extract
else:
print(page_response.status_code)
letterlijk vertaald als
if page_response.status_code == 200:
else:
print(page_response.status_code)
en produceert daarom IndentationError
.
Je kunt het oplossen door ten minste een pass
-opdracht of een willekeurige werkregel in de if
-instructie te plaatsen.
Een soortgelijke vraag is al eerder gesteld:
Python: verwacht een ingesprongen blok
Antwoord 3
import requests
from bs4 import BeautifulSoup
def simple_get(url):
try:
page_response = requests.get(url, timeout=5)
if page_response.status_code == 200:
print(page_response.status_code)
pass
# extract
else:
print(page_response.status_code)
# notify, try again
except requests.Timeout as e:
print("It is time to timeout")
print(str(e))
simple_get("https://www.nytimes.com/")