ich habe ein Programm geschrieben, welches zwei URLs als Input nimmt, und sich von diesen URLs jeweils eine .ical-Datei holt. Wenn aus welchem Grund auch immer die angegebene URL fehlerhaft ist, möchte ich dies gerne mit Try/Except abfangen. Trotz Try und Except in der main Methode, wirft mir das Programm bei fehlerhaften URLS, bspw. "1" und "2", einen Fehler, welcher aus dem requests-Modul zu kommen scheint :
raise MissingSchema(
requests.exceptions.MissingSchema: Invalid URL '2': No scheme supplied. Perhaps you meant http://2?
raise MissingSchema(
requests.exceptions.MissingSchema: Invalid URL '1': No scheme supplied. Perhaps you meant http://1?
Eigentlich gehe ich davon aus, dass der gesamte Code innerhalb des Try in der Main-Datei dann dem Try unterliegt, egal ob die dort ausgeführten Methoden bzw. Klassen aus der Imports.py importiert werden. Warum kann ich dann den Fehler mit meinem Try/Except nicht abfangen?
Datei 1: main.py
Code: Alles auswählen
import requests
import Imports
import threading
try:
url1 = input("Input URL No.1:")
url2 = input("Input URL No.2:")
t1 = Imports.myThread(url1)
t2 = Imports.myThread(url2)
t1.start()
t2.start()
t1.join()
t2.join()
split_events1 = t1.value
split_events2 = t2.value
EventListObject = Imports.handleEvents(split_events1)
EventListObject2 = Imports.handleEvents(split_events2)
for day in EventListObject.listOfEvents:
for day2 in EventListObject2.listOfEvents:
if day.date == day2.date:
if day.starttime == day2.starttime and day.endtime == day2.endtime:
print("Match: " + day.date)
except:
print("Invalid Input.")
Code: Alles auswählen
import requests
import threading
class Eventday:
def __init__(self, datee, starttime, endtime):
self.date = datee
self.starttime = starttime
self.endtime = endtime
def updateEndTime(self, newendtime):
if newendtime > self.endtime:
self.endtime = newendtime
def updateStartTime(self, newstarttime):
if newstarttime < self.starttime:
self.starttime = newstarttime
class EventList:
def __init__(self):
self.listOfEvents = []
def handle(self, datee, starttime, endtime):
binResult = binarySearch(self.listOfEvents, datee)
if binResult != -1:
self.listOfEvents[binResult].updateStartTime(starttime)
self.listOfEvents[binResult].updateEndTime(endtime)
else:
self.listOfEvents.append(Eventday(datee, starttime, endtime))
def handleURL(inputurl):
cal_i = requests.get(inputurl).text
split_overhead = cal_i.split("END:VTIMEZONE")
split_events = split_overhead[1].split("BEGIN:VEVENT")
return split_events
class myThread(threading.Thread):
def __init__(self, url):
threading.Thread.__init__(self)
self.url = url
self.value = None
def run(self):
self.value = handleURL(self.url)
def handleEvents(eventlist):
eventlistobject = EventList()
for event in eventlist:
date = 0
endt = 0
stime = 0
remote = False
for line in event.splitlines():
if "DTEND" in line:
date = line.split(":")[1].split("T")[0]
endt = line.split(":")[1].split("T")[1]
# print(date)
if "DTSTART" in line:
stime = line.split(":")[1].split("T")[1]
if "Raum Online" in line:
remote = True
if not remote and stime != 0:
eventlistobject.handle(date, stime, endt)
return eventlistobject
def binarySearch(list, value):
low = 0
high = len(list) - 1
while low <= high:
middle = (high + low) // 2
if list[middle].date < value:
low = middle + 1
elif list[middle].date > value:
high = middle - 1
else:
return middle
return -1

Falls noch weitere Informationen benötigt werden, gerne fragen.
Vielen Dank im Voraus