A tesztelt Python-repozitóriumok 3,6%-ában hibákat találtak, amelyek elmaradt vesszőkkel kapcsolatosak

Megjelentek a Python nyelvű kódok helytelen vesszőhasználatával kapcsolatos tanulmány eredményei. A problémák forrása, hogy a Python automatikusan egyesíti a listák elemeit, ha azok nincsenek vesszővel elválasztva, továbbá a vessző után helyezett értéket tupleként kezel. 666 GitHub-repozitórium automatikus elemzése után a kutatók 5%-ban azonosítottak lehetséges vesszőproblémákat a vizsgált projektekben.

A további manuális ellenőrzés azt mutatta, hogy valós hibák mindössze 24 repo­zitóriumban (3,6%) találhatók, míg a maradék 1,4% téves riasztás (például a vessző szándékos kihagyása a fájlok útvonalának, hosszú hashoknak, HTML-blokkoknak vagy SQL-kifejezéseknek a több sorba való összevonása érdekében). Érdekes, hogy a 24 repo­zitórium között valódi hibákkal olyan nagy projekteket találtak, mint a Tensorflow, a Google V8, a Sentry, a Pydata xarray, a rapidpro, a django-colorfield és a django-helpdesk. Ugyanakkor a vesszőproblémák nem specifikusak a Pythonra, és gyakran előkerülnek C/C++ projekteknél is (például a közelmúltbeli javítások — LLVM, Mono, Tensorflow).

A vizsgált hibák fő típusai:

  • Véletlenül kihagyott vesszők listákban, tuple-okban és halmazokban, amelyek miatt az elemek egyesülnek ahelyett, hogy külön értékként értelmeznék őket. Például a Sentry egyik tesztjében hiányzott a vessző a „releases” és a „discover” között a listában, ami a nem létező „/releasesdiscover” kezelő ellenőrzéséhez vezetett ahelyett, hogy külön ellenőrizték volna a „/releases” és a „/discover” elérhetőséget.
    A tesztelt Python-repozitóriumok 3,6%-ában hibákat találtak, amelyek elmaradt vesszőkkel kapcsolatosak

    Egy másik példa — a rapidpro-ban kihagyott vessző két különböző szabályt egyesített az 572. sorban:

    A tesztelt Python-repozitóriumok 3,6%-ában hibákat találtak, amelyek elmaradt vesszőkkel kapcsolatosak
  • Hiányzó vessző a tuple egy elemű definiálásának végén, amely miatt a hozzárendelés során nem tuple, hanem sima típus kerül hozzárendelésre. Például a „values = (1,)” kifejezés egy elemű tuple-t rendel a változóhoz, azonban a „values = (1)” egész típusú hozzárendelést eredményez. A zárójelek a megadott hozzárendelésekben nem befolyásolják a típus meghatározását, és elhagyhatóak, a tuple létezését pedig a parser csak a vesszők jelenléte alapján határozza meg. REST_FRAMEWORK = { ‘DEFAULT_PERMISSION_CLASSES’: ( ‘rest_framework.permissions.IsAuthenticated’ # A tuple helyett itt egy string kerül hozzárendelésre. ) }
  • A fordított helyzet — felesleges vesszők a hozzárendelésnél. Ha a hozzárendelés végén véletlenül marad egy vessző, akkor a szokásos típus helyett egy tuple lesz hozzárendelve (például, ha a «value = 1» helyett a «value = 1,» van megadva).

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster