In 3,6 % der getesteten Python-Repositories wurden Fehler im Zusammenhang mit fehlenden Kommas festgestellt.

Die Ergebnisse einer Studie zur Anfälligkeit von Python-Code für Fehler durch inkorrekte Verwendung von Kommas wurden veröffentlicht. Die Probleme entstehen dadurch, dass Python bei Aufzählungen automatisch Strings in einer Liste zusammenführt, wenn sie nicht durch Kommas getrennt sind, und auch den Wert als Tuple behandelt, wenn auf den Wert ein Komma folgt. Durch die automatisierte Analyse von 666 GitHub-Repositories mit Python-Code identifizierten die Forscher mögliche Komma-Probleme in 5 % der untersuchten Projekte.

Eine anschließende manuelle Überprüfung ergab, dass tatsächliche Fehler nur in 24 Repositories (3,6 %) vorkommen, während die restlichen 1,4 % Fehlalarme sind (zum Beispiel könnte ein Komma absichtlich zwischen Strings weggelassen worden sein, um gebrochene Datei-Pfade, lange Hashes, HTML-Blöcke oder SQL-Ausdrücke zusammenzuführen). Interessanterweise gehören zu den 24 Repositories mit tatsächlichen Fehlern größere Projekte wie Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield und django-helpdesk. Dabei sind die Komma-Probleme nicht spezifisch für Python und tauchen häufig in C/C++-Projekten auf (beispielsweise kürzliche Korrekturen — LLVM, Mono, Tensorflow).

Hauptarten der untersuchten Fehler:

  • Ein versehentlich fehlendes Komma in Listen, Tuples und Mengen, das dazu führt, dass Strings zusammengeführt werden, anstatt sie als separate Werte zu interpretieren. Zum Beispiel wurde in Sentry in einem der Tests ein Komma zwischen den Strings „releases“ und „discover“ in einer Liste übersehen, was dazu führte, dass der nicht existierende Handler „/releasesdiscover“ überprüft wurde, anstatt getrennt „/releases“ und „/discover“ zu überprüfen.
    In 3,6 % der getesteten Python-Repositories wurden Fehler im Zusammenhang mit fehlenden Kommas festgestellt.

    Ein weiteres Beispiel — das fehlende Komma in rapidpro führte dazu, dass zwei verschiedene Regel in Zeile 572 zusammengeführt wurden:

    In 3,6 % der getesteten Python-Repositories wurden Fehler im Zusammenhang mit fehlenden Kommas festgestellt.
  • Ein fehlendes Komma am Ende der Definition eines Ein-Elemente-Tupels, das dazu führt, dass bei der Zuweisung nicht ein Tuple, sondern ein gewöhnlicher Typ zugewiesen wird. Zum Beispiel führt der Ausdruck „values = (1,)“ zur Zuweisung einer Variable mit einem Ein-Elemente-Tuple, während „values = (1)“ zur Zuweisung eines Ganzzahltyps führt. Die Klammern in den angegebenen Zuweisungen beeinflussen nicht die Typdefinition und sind optional, während das Vorhandensein eines Tuples nur anhand der Kommas vom Parser erkannt wird. REST_FRAMEWORK = { ‘DEFAULT_PERMISSION_CLASSES’: ( ‘rest_framework.permissions.IsAuthenticated’ # anstelle eines Tuples wird ein String zugewiesen. ) }
  • Die gegenteilige Situation – überflüssige Kommas bei der Zuweisung. Wenn am Ende einer Zuweisung versehentlich ein Komma zurückgelassen wird, wird anstelle eines normalen Typs ein Tuple zugewiesen (zum Beispiel, wenn anstelle von „value = 1“ „value = 1,“ angegeben wird).

Quelle: opennet.ru

60GB SSD 8Gb DDR4