Sirius3 hat geschrieben: Sonntag 16. Juni 2019, 12:18
`core` ist ein schlechter Name für ein Paket, weil zu allgemein, ebenso `run.py` als Scriptname.
Innerhalb der Module daher am besten auch relative Importe verwenden, dann ist das umbenennen des Pakets kein Problem.
In assistant.py: das globale ›instance‹ gehört weg. Dokstrings gehören in die Klasse, bzw. Methode.
Das ›run‹ gehört nicht in Assistant.__init__, denn __init__ sollte ein Objekt initialisieren und dann zurückkehren und nicht ewig laufen. Ebenso sollte das was in setup steht direkt in __init__ sein, und greet nicht darin aufgerufen werden.
In ›run‹, Du hast eigentlich eine while-not-stop-Schleife, weil Du ja als erstes gleich auf stop prüfst.
Wenn in jedem except ein `break` steht, dann sollte das try einfach außerhalb der while-Schleife stehen. Da das allgemeine except nichts macht, außer den Traceback darstellen, kann es ganz weg.
Wenn Du eine andere Ausgabe dort willst, gehört das auch nicht in ›run‹ sondern in ›main‹.
Alles innerhalb des if mit `listen_for_keyword` gehört in eine Funktion, weil ›run‹ sonst zu lange ist und zu weit eingerückt ist. `continue` vermeiden.
modules.log kann weg, Du benutzt doch schon logging, und das Zusatzmodul kann nichts, was logging nicht schon machen würde.
In `matching` ist in test_match und check_match viel doppelter Code. Dass die json-Datei ständig neu geladen wird, ist umständlich. Du hast überall viele Klassen, warum hier, wo es wirklich Sinn macht eine Matchingklasse zu haben, nicht??
In `get_match` iterierst Du über einen Index, wo soll denn der TypeError auftreten? Oje, jetzt seh ich das erst. Du benutzt die Tatsache, dass Du in der Debug-Meldung auf cmd zugreifst und dass das None sein kann bei einem Indexzugriff dann einen TypeError auslöst. Das ist die Umständlichste Art, die ich je gesehen habe um `if cmd is not None:` auszudrücken.
In › execute_match‹ nicht direkt auf __Methoden__ wie __contains__ zugreifen, benutze ›in‹.
In ›stt.py‹ wird ›global‹ benutzt, so dass ich hier nicht mehr durchblicke. So lange das nicht aufgeräumt ist, was wohl bedeutet, es komplett umzuschreiben, lohnt sich kein Blick hinein.