
Es gibt mehrere Werkzeuge, die Python-Code statisch analysieren, oder es zumindest versuchen. Das klappt für so einfache Sachen wie die Namensschreibweisen oder überflüssige ``pass``-Anweisungen sehr gut (wobei man das natürlich auch ohne ein Werkzeug leicht sehen kann wenn man den Quelltext durchliest), und für Sachen die mit Attributen und Vererbung zu tun haben, so gut wie es eben bei einer dynamisch typisierten Programmiersprache geht. Die verbreitetsten Werkzeuge dürften `pep8`, `pyflakes`, und `pylint` sein. In vernünftigen™ Editoren und IDEs kann man so etwas auch integrieren, so dass man auf Knopfdruck oder automatisch beim Speichern einen Analyselauf anstossen kann, und das Ergebnis irgendwie sinnvoll präsentiert wird.
Semantische Sachen wie `start()` in der `Thread.__init__()`, die falsche Verwendung von Sockets, oder irreführende Namen weil deren Bedeutung nicht zu dem passt wofür sie stehen, kann der Rechner nicht automatisch finden. Wenn er so etwas könnte, währen wir wahrscheinlich nicht weit von Rechnern entfernt die sich selber programmieren. Da lauert dann der Terminator um die Ecke.

Beruflich programmiere ich viel. Welch eine Überraschung.
