Try/Except funktioniert nicht
Verfasst: Samstag 12. November 2022, 21:25
Moin,
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
Datei 2: Imports.py
Ich hoffe ihr könnt mir irgendwie weiterhelfen und ich übersehen einfach nur etwas, bin eher ein Anfänger 
Falls noch weitere Informationen benötigt werden, gerne fragen.
Vielen Dank im Voraus
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