Du kannst selber Module erstellen, genauer ist jede Python Datei und jedes Package (Ordner mit __init__.py Datei) ein Modul (Man kann sie sogar im Programm "on the fly" erstellen, aber bisher kenne ich keinen Fall, indem eine solch aggressive Namensraumeröffnung per Modul wirklich tragbar und praktisch wäre - aber das nur Nebenbei).
Die Klasse "Vergeben" funktioniert bei mir als Exception.
Und genau dafür sollte man Exceptions nicht einsetzen. Exceptions haben einen Sonderstatus und sollte nur bemüht werden, wenn es wirklich um (wie der Name ja sagt) Ausnahmen geht, mit denen man so nicht gerechnet hat oder die separat von der eigentlichen Logik benutzt werden, um eben auf Ausnahmesituationen zu reagieren. Sie sind nur für Dinge gedacht, die nicht direkt mit der Programmlogik zu tun haben sondern mit "extremeren" Problemen.
Das Problem an Exceptions ist, das sie eine Art "goto" darstellen. Das ist ein Konstrukt aus den ersten (imperativen) Sprachen, um an eine bestimmte Stelle im Quelltext zu "springen". Goto sollte man nicht verwenden, da es zu "Spaghetti Code" führt, und irgendwann schwer zu verstehen ist. Bei Exceptions macht sowas durchaus Sinn, sofern man es nicht extensiv betreibt. Aber sobald man es in der eigentlichen Logik benutzt, benutzt man "goto" nur auf umständliche Art und Weise.
BaseException ist die Grundklasse für alle Exceptions. Für die eigene Definition von Exceptions sollte man aber die Klasse Exception benutzen, die nicht ganz so "low level" ist. Ich dachte, man könne nicht eigene Klassen als Exception benutzen, die nicht von BaseException oder Exception erben, was aber nicht stimmt - ich hatte beim Test eine Klasse, die von object erbt, diese kann man nicht "raisen".
Übringens wird das mit Python 3.0 sowieso nicht mehr gehen, sollte man am Exception Modell nichts geändert haben. In Python 3.0 gibt es nur noch New Style Klassen, man muss also zwingend von einer Klasse erben, die von object erbt, oder selbst von object erben (wird das eigentlich dann automatisch gemacht? Oder bekomme ich dann einen SyntaxError bei "class Xyz: pass"?).
Das war jetzt aber für einen Anfänger alles etwas viel, was machst du da eigentlich? Sind das Aufgaben, die du abarbeitest? Dann könnte man sowas natürlich machen, rein des Lernens wegen. Wenn du aber versuchsts, irgendwas Richtiges mit solchem Code zu schreiben, dann kann ich nur raten, es erstmal zu lassen, und das Python.org Tutorial ausführlich durchzuarbeiten.