3.6% ng mga nasubok na repositoryo ng Python ay may mga nawawalang comma error

Ang mga resulta ng isang pag-aaral sa kahinaan ng Python code sa mga error na nauugnay sa maling paggamit ng mga kuwit sa code ay nai-publish. Ang mga problema ay sanhi ng katotohanan na kapag nag-enumerate, awtomatikong pinagsasama-sama ng Python ang mga string sa listahan kung hindi sila pinaghihiwalay ng kuwit, at tinatrato din ang halaga bilang isang tuple kung ang halaga ay sinusundan ng kuwit. Pagkatapos magsagawa ng automated analysis ng 666 GitHub repository na may Python code, natukoy ng mga mananaliksik ang mga posibleng isyu sa comma sa 5% ng mga proyektong pinag-aralan.

Ang karagdagang manu-manong inspeksyon ay nagpakita na ang mga tunay na error ay naroroon lamang sa 24 na mga repositoryo (3.6%), at ang natitirang 1.4% ay mga maling positibo (halimbawa, ang isang kuwit ay maaaring sadyang tanggalin sa pagitan ng mga linya upang pagsamahin ang mga multi-line na landas ng file, mahabang hash, HTML mga bloke o SQL expression). Kapansin-pansin na kabilang sa 24 na mga repository na may totoong mga error ay ang mga malalaking proyekto tulad ng Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield at django-helpdesk. Gayunpaman, ang mga problema sa mga kuwit ay hindi partikular sa Python at madalas na lumalabas sa mga proyektong C/C++ (mga halimbawa ng mga kamakailang pag-aayos ay LLVM, Mono, Tensorflow).

Ang mga pangunahing uri ng mga pagkakamali na pinag-aralan:

  • Aksidenteng nawawala ang kuwit sa mga listahan, tuple, at set, na nagiging sanhi ng pagsasama-sama ng mga string sa halip na bigyang-kahulugan bilang magkahiwalay na mga halaga. Halimbawa, sa Sentry, ang isa sa mga pagsubok ay may hindi nakuhang kuwit sa pagitan ng mga string na "releases" at "discover" sa listahan, na nagresulta sa pagsuri sa isang hindi umiiral na "/releasesdiscover" na handler, sa halip na suriin ang "/releases" at " /discover" nang hiwalay.
    3.6% ng mga nasubok na repositoryo ng Python ay may mga nawawalang comma error

    Ang isa pang halimbawa ay ang isang nawawalang kuwit sa rapidpro ay nagdulot ng dalawang magkaibang mga panuntunan upang pagsamahin sa linya 572:

    3.6% ng mga nasubok na repositoryo ng Python ay may mga nawawalang comma error

  • Isang nawawalang kuwit sa dulo ng isang solong-element na kahulugan ng tuple, na nagiging sanhi ng pagtatalaga upang magtalaga ng isang regular na uri sa halip na isang tuple. Halimbawa, ang expression na "values ​​​​= (1,)" ay magreresulta sa isang pagtatalaga sa isang variable ng isang tuple ng isang elemento, ngunit ang "values ​​​​= (1)" ay magreresulta sa isang pagtatalaga ng isang uri ng integer. Ang mga panaklong sa mga takdang-aralin na ito ay hindi nakakaapekto sa kahulugan ng uri at opsyonal, at ang pagkakaroon ng isang tuple ay tinutukoy lamang ng parser batay sa pagkakaroon ng mga kuwit. REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # ay bibigyan ng string sa halip na isang tuple. ) }
  • Ang kabaligtaran na sitwasyon ay mga karagdagang kuwit sa panahon ng pagtatalaga. Kung ang isang kuwit ay hindi sinasadyang naiwan sa dulo ng isang takdang-aralin, ang isang tuple ay itatalaga bilang ang halaga sa halip na ang karaniwang uri (halimbawa, kung ang β€œvalue = 1,” ay tinukoy sa halip na β€œvalue = 1”).

Pinagmulan: opennet.ru

Magdagdag ng komento