Task_4: Exception und Error-Management in fetch_bergbahnen

This commit is contained in:
Marco Schmid 2026-05-11 17:45:05 +02:00
parent f92fdd93e4
commit 9faf1ceea9
2 changed files with 42 additions and 12 deletions

15
TASK.md
View File

@ -1,12 +1,5 @@
# TASK 3:
# TASK 4:
Für `Task_2` habt ihr das requests-Modul benötigt, welches mit `pip install requests` installiert werden musste.
Ich habe zusätzlich eine neue Datei `requirements.txt` erstellt, worin das installierte Modul `requests`
nun aufgeführt ist. Das hilft, dass andere Programmierer am Schluss euer Projekt einfach nachbauen/ausführen können.
* Fügt der aktuellen Funktion einen aussagekräftigen **Docstrings** und **Typehints** hinzu.
Ziel ist es in unserem Miniprojekt ab nun stets aktuelle und aussagekräfte Docstrings und überall Typehints zu verwenden!
Das mag zwar beim Erstellen ein wenig lästig sein, ist aber eine Investition in die Zukunft!
Denkt immer daran: "Ein Code wird meist häufiger gelesen als geschrieben..."
* Versucht mal bbox auf die ganze Schweiz (45.8, 5.9, 47.8, 10.5) zu setzen und die Funktion aufzurufen. Klappt das?
* Versucht ein Error-Management mit in die Funktion einzubauen. Benutzt dazu eine eigene `OverpassApiError`-Klasse.
-> Überlegt: Was könnte nicht klappen? Wo könnte es Fehler geben?

39
main.py
View File

@ -17,7 +17,44 @@ out center body;
"""
def fetch_bergbahnen(bbox) -> dict:
def fetch_bergbahnen(bbox: tuple) -> dict:
"""
Fragt die Overpass API nach Bergbahnen in der angegebenen Bounding Box ab.
Sendet einen HTTP-POST-Request an die Overpass API und gibt die geparste
JSON-Antwort zurück.
Args:
bbox (tuple): Bounding Box als 4-Tuple in Dezimalgrad:
(south, west, north, east)
Beispiel Davos: (46.72, 9.70, 46.92, 10.00)
Beispiel Schweiz: (45.8, 5.9, 47.8, 10.5)
Returns:
dict: Geparste JSON-Antwort der Overpass API. Die Antwort enthält
unter dem Schlüssel "elements" eine Liste von OSM-Objekten
(nodes und ways) mit ihren Tags und Koordinaten.
Beispiel:
{
"elements": [
{
"type": "node",
"id": 123456,
"lat": 46.8, "lon": 9.8,
"tags": {"aerialway": "station", "name": "Jakobshorn"}
},
...
]
}
Raises:
OverpassApiError: Wenn die API nicht innerhalb des gesetzten Timeouts
antwortet (clientseitig, unabhängig vom serverseitigen
Timeout im Query).
OverpassApiError: Wenn der Request aus einem anderen Grund fehlschlägt
(z.B. 429 Too Many Requests, 504 Gateway Timeout,
Netzwerkfehler).
"""
bbox_str = ",".join(map(str, bbox))
query = BERGBAHN_QUERY.format(bbox=bbox_str)