3.6% fan Python-repositories dy't hifke binne, hiene ûntbrekkende kommafouten

De resultaten fan in stúdzje oer de kwetsberens fan Python-koade foar flaters yn ferbân mei it ferkearde gebrûk fan komma's yn 'e koade binne publisearre. De problemen wurde feroarsake troch it feit dat Python by it opteljen automatysk de stringen yn 'e list gearfoegje as se net skieden wurde troch in komma, en ek de wearde behannelet as in tuple as de wearde wurdt folge troch in komma. Nei it útfieren fan in automatisearre analyse fan 666 GitHub-repositories mei Python-koade, identifisearren de ûndersikers mooglike kommaproblemen yn 5% fan 'e ûndersochte projekten.

Fierder hânmjittich ynspeksje die bliken dat echte flaters oanwêzich wiene yn mar 24 repositories (3.6%), en de oerbleaune 1.4% wiene falske posityf (bygelyks, in komma koe mei opsetsin weilitten wurde tusken de rigels om multi-line triempaden, lange hashes, HTML te ferbinen blokken of SQL-útdrukkingen). It is opmerklik dat ûnder de 24 repositories mei echte flaters sokke grutte projekten wiene as Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield en django-helpdesk. Problemen mei komma's binne lykwols net spesifyk foar Python en komme faak op yn C / C ++ projekten (foarbylden fan resinte fixes binne LLVM, Mono, Tensorflow).

De wichtichste typen fan flaters studearre:

  • Tafallich ûntbrekt in komma yn listen, tuples en sets, wêrtroch't stringen wurde gearfoege ynstee fan ynterpretearre as aparte wearden. Bygelyks, yn Sentry miste ien fan 'e tests in komma tusken de snaren "releases" en "discover" yn 'e list, wat resultearre yn it kontrolearjen fan in net-besteand "/releasesdiscover" handler, ynstee fan it kontrolearjen fan "/releases" en " /discover" apart.
    3.6% fan Python-repositories dy't hifke binne, hiene ûntbrekkende kommafouten

    In oar foarbyld is dat in ûntbrekkende komma yn rapidpro feroarsake twa ferskillende regels om te fusearjen op rigel 572:

    3.6% fan Python-repositories dy't hifke binne, hiene ûntbrekkende kommafouten

  • In ûntbrekkende komma oan 'e ein fan in tuple-definysje fan ien elemint, wêrtroch't de opdracht in gewoane type tawize ynstee fan in tuple. Bygelyks, de útdrukking "wearden = (1,)" sil resultearje yn in tawizing oan in fariabele fan in tuple fan ien elemint, mar "wearden = (1)" sil resultearje yn in tawizing fan in hiel getal type. De heakjes yn dizze opdrachten hawwe gjin ynfloed op de typedefinysje en binne opsjoneel, en de oanwêzigens fan in tuple wurdt bepaald troch de parser allinich op basis fan 'e oanwêzigens fan komma's. REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # sil in tekenrige wurde tawiisd ynstee fan in tuple. ) }
  • De tsjinoerstelde situaasje is ekstra komma's by opdracht. As in komma by ûngelok oerbleaun is oan 'e ein fan in opdracht, sil in tuple wurde tawiisd as de wearde ynstee fan it gewoane type (bygelyks as "wearde = 1," wurdt oantsjutte ynstee fan "wearde = 1").

Boarne: opennet.ru

Add a comment