Probatu diren Python biltegien % 3.6k koma-erroreak zituen

Kodean komak gaizki erabiltzearekin lotutako akatsen aurrean Python-en ahultasunari buruzko ikerketa baten emaitzak argitaratu dira. Arazoak zenbatzerakoan, Python-ek automatikoki kateak kateak kateatzen ditu komaz bereizten ez badira, eta balioa tupla gisa tratatzen du, balioaren ondoren koma bat badator. Python kodearekin 666 GitHub biltegien azterketa automatizatua egin ondoren, ikertzaileek koma-arazo posibleak identifikatu zituzten aztertutako proiektuen % 5etan.

Eskuzko ikuskapen gehiagok erakutsi zuen benetako erroreak 24 biltegietan (% 3.6) bakarrik zeudela eta gainontzeko % 1.4a positibo faltsuak zirela (adibidez, lerroen artean koma nahita ezaba zitekeen lerro anitzeko fitxategien bideak, hash luzeak, HTML) kateatzeko. blokeak edo SQL adierazpenak). Azpimarratzekoa da benetako erroreak zituzten 24 biltegien artean Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield eta django-helpdesk bezalako proiektu handiak zeudela. Hala ere, komak dituzten arazoak ez dira Python-en espezifikoak eta askotan C/C++ proiektuetan agertzen dira (azken konponketen adibideak LLVM, Mono, Tensorflow dira).

Aztertutako akats mota nagusiak:

  • Zerrendetan, tuplatan eta multzoetan koma bat falta da ustekabean, kateak kateak kateatzea eraginez, balio bereizi gisa interpretatu beharrean. Esate baterako, Sentry-n, probetako batek zerrendako "releases" eta "discover" kateen arteko koma galdu zuen, eta horren ondorioz existitzen ez zen "/releasesdiscover" kudeatzaile bat egiaztatu zuen, "/releases" eta " "/releases" egiaztatu beharrean. /deskubritu" bereizita.
    Probatu diren Python biltegien % 3.6k koma-erroreak zituen

    Beste adibide bat da rapidpro-n falta den komak bi arau ezberdin batu izana 572 lerroan:

    Probatu diren Python biltegien % 3.6k koma-erroreak zituen

  • Elementu bakarreko tupla definizioaren amaieran koma falta da, eta esleipenari mota arrunt bat esleitzea eragiten du tupla bat baino gehiago. Adibidez, "balioak = (1,)" esapideak elementu bateko tupla baten aldagai bati esleitzea eragingo du, baina "balioak = (1)" zenbaki oso baten esleipena eragingo du. Esleipen hauetako parentesiek ez dute motaren definizioari eragiten eta aukerakoak dira, eta tupla baten presentzia analizatzaileak zehazten du komak egotean soilik. REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # kate bat esleituko zaio tupla baten ordez. ) }
  • Kontrako egoera esleipenean zehar koma gehigarriak dira. Esleipen baten amaieran ustekabean koma bat uzten bada, tupla bat esleituko da ohiko motaren ordez balio gisa (adibidez, "balioa = 1" zehazten bada "balioa = 1") ordez.

Iturria: opennet.ru

Gehitu iruzkin berria