I-print ang Stacktrace sa Pyhton Log

I Print Ang Stacktrace Sa Pyhton Log



Ang isang koleksyon ng mga approach na tawag sa isang partikular na sandali ay kinakatawan sa isang stacktrace. Kapag ang isang programa ay nagtaas ng eksepsiyon, ang Python ay bumubuo ng isang stacktrace, na kilala rin bilang isang traceback o backtrace. Mayroong iba't ibang detalye sa stacktrace na ito na maaaring samantalahin upang mahanap ang problema. Ang Python logging package ay may ilang pangunahing tampok at may maraming antas ng pag-log kabilang ang 'debug', 'impormasyon', 'babala', 'error', at 'kritikal'.

Halimbawa 1: I-print ang Stacktrace sa Python sa pamamagitan ng Paggamit ng Traceback Module

Sa halimbawang ito, gagamit kami ng simpleng piraso ng code para ipakita kung paano ipatupad ang traceback module ng Python para i-print ang stack trace. Ang trackback package na ito ay may kasamang pinakagustong feature para sa pagkolekta, pag-iimbak, at pagpapakita ng mga stack trace mula sa mga wika ng computer. Matapat nitong kino-duplicate ang mga operasyon sa pag-print ng stack trace ng script. Kung sakaling kailanganin mong tingnan ang stack trace, ito ay mahalaga.

Sa madaling salita, ipinapakita ng isang stack trace ang bawat operasyon na nauna sa isa na nagresulta sa problema. Ang pinakamahalagang impormasyon ay palaging iniuulat sa huling linya ng isang stack trace, na kapag natukoy ang fault. Ang lahat ng mga function na tawag sa nagresultang error ay maaaring magamit upang mabilis na mahanap at malutas ang problema.







Magsimula tayo sa pamamagitan ng pagpapatupad ng code sa pamamagitan ng pag-import ng traceback Python library. Pagkatapos, sa sumusunod na linya, lumikha kami ng isang array at ilista ang mga elemento na may ilang mga halaga. Ang mga value ng listahan ng array ay “7”, “8”, “9”, at “10”. Mayroong apat na halaga sa listahan ng array. Ang listahan ng array na ito ay na-save sa dating nasimulang variable na 'A'.



Kasunod nito, ginagamit namin ang terminong 'subukan' at ang halagang 'A=6' sa sumusunod na linya. Ginagamit namin ang try-except block sa Python para pamahalaan ang mga exception. Ginagamit ang diskarteng ito para isulat ang script na maaaring magdulot ng error sa block header. Ang mga pagbubukod ay mahalagang mga error, katulad ng mga error sa syntax. Sa panahon ng pagbubukod ng isang programa, ang paghawak ng exception ay ang natatanging pagkilos ng pagtugon sa pagbubukod. Pagbabalik sa script, ginagamit namin ang 'maliban' sa susunod na linya.



Sa except block, ginagamit namin ang “traceback.print exc()” na maikli para sa “printing exception”. Ginagamit namin ang function na 'print()' sa loob ng exception box na 'program end' upang ang pahayag na ito ay mag-print kapag lumitaw ang exception. Ngayon, kung may maganap na exception sa try box, agad na lilipat ang program sa except blocks at magpapatuloy. Kung ang isang exception ay hindi nangyari, ang exception block ay ganap na nilaktawan. Ngayong nangyari na ang pagbubukod, makikita natin sa code na ang value na '6' ay inilagay sa try box kahit na wala ito sa listahan ng array. Bilang resulta, agad na mapupunta ang code sa exception box at ipi-print ang statement na “program ends” sa output display.





Ang iba't ibang function na tawag na bumubuo sa traceback ay inayos mula sa pinakabago hanggang sa pinakabago, mula sa ibaba hanggang sa itaas. Ang mga operasyong ito ay kinakatawan lahat ng dalawang linyang pahayag. Ang bawat tawag ay nagsisimula sa pangalan ng file, numero ng pagkakasunud-sunod, at pangalan ng module, na lahat ay nagpapahiwatig ng lokasyon ng code. Pagkatapos nito, ipapakita nito ang exception print statement na “program end” dahil ang value na “6” ay wala sa idineklara na listahan, na nagreresulta sa “list index out of range” na output.



Halimbawa 2: I-print ang Stacktrace sa Python sa pamamagitan ng Paggamit ng Paraan ng Pag-log.Exception().

Sa halimbawang ito, ipapakita namin kung paano gamitin ang paraan ng 'logging.exception()' ng Python para mag-output ng stacktrace. Ang logging package sa Python ay nagbibigay-daan sa amin na i-log ang mga error pati na rin itala ang mga error at exception. Ang mga module sa pag-log ay nagbibigay sa amin ng isang seleksyon ng mga module sa pag-log kabilang ang 'debug', “impormasyon”, “babala”, “error,” at “kritikal”. Ang mga ito ay mahalagang mga layer ng mga module ng pag-log, upang ilagay ito nang simple. Upang mag-log ng exception na may error sa Python, gamitin ang function na “logging.exception()”. Ang function na ito ay nagdaragdag ng ulat na may status na ERROR sa logger na ito. Ito ay pinaniniwalaan na ang mga parameter ay para sa pag-debug. Ang impormasyon tungkol sa pagbubukod ay nakalakip sa ulat sa pag-log. Ang tanging lokasyon kung saan dapat gamitin ang pamamaraang ito ay ang mga humahawak ng exception.

Ngayon, tingnan natin ang code. Una, nag-import kami ng dalawang aklatan - ang una ay ang pag-log at ang pangalawa ay ang traceback. Pagkatapos, ginagamit namin ang 'basicConfig' na paraan na may 'pag-log' at tukuyin ang antas bilang 'logging.Debug'. Ang tanging argumento na kinukuha ng pamamaraang 'getLogger()' ay 'pangalan'. Kaya, ginagamit namin ito kapag ginagamit ang function na 'logging.getlogger'. Kung ang isang pangalan ay ibinigay, isang reference sa isang logger instance na may ganoong pangalan ay nabuo; kung hindi, ang ugat ay ibinalik. Ang parehong logger object ay isinangguni ng maraming getLogger() operations na may parehong pagkakakilanlan.

Pagkatapos, ginagamit namin upang subukan, at tulad ng alam namin sa try block, isinusulat namin ang code na maaaring magtaas ng exception. Sa kasong ito, ginagamit namin ang 'myfunction()'. Kung ang ibinigay na sitwasyon ay hindi tumutugma, ang isang pagbubukod ay magaganap. Pagkatapos, agad na tumalon ang code sa except block. Sa exception blog na ito, ginagamit namin ang “logging.info”. Sa loob nito, isinusulat namin ang mensahe na gusto naming i-print na 'exception took place'. Ito ay dahil kung mangyari ang isang pagbubukod, ang isang error ay nangyayari lamang pagkatapos ay ipinapakita nito ang mensaheng ito sa screen. Ngunit kung hindi nangyari ang error, binabalewala nito ang buong mensahe ng pagbubukod.

Itinakda din namin ang 'exc info=True' kasama ng mensahe. Ang buong stacktrace ay isasama sa pag-log kapag ang exc info ay nakatakda sa True, katulad ng kung ano ang mangyayari sa 'logger.exception()'. Ang tanging pagkakaiba ay na maaari mong mabilis na ilipat ang antas ng log mula sa error sa ibang bagay sa pamamagitan lamang ng pagpapalit ng logger.

Ngayong nagkaroon ng exception sa script, ang unang linya ng output ay ang 'exception took place' na mensahe na sinusundan ng logging level na ginamit sa script na 'info.' Lumilitaw ang pangalan ng logger bilang ugat sa kasong ito. Pagkatapos, ang traceback na tawag ay lalabas, na ipinapakita ang module, linya, at mga pangalan ng file. Sa wakas, ang mensahe ng error na 'myfunction' ay hindi tinukoy.

Pag-usapan natin ang ilan pang code na gumagamit ng pag-log. Ang pamamaraan ng exception() ay nagsisimula sa pamamagitan ng pag-import ng library para sa pag-log. Susunod, dalawang variable - 'm' at 'n' - ay sinisimulan at binibigyan ng mga halaga ng '7' at '0', ayon sa pagkakabanggit. Ang try block ay ginagamit na ngayon sa kasunod na hakbang. Sa loob nito, isinusulat namin ang code na maaaring magdulot ng exception. Una, ipinapahayag namin ang variable na 'o'. Pagkatapos, itinakda namin ang 'm' na hinati ng 'n'. Nagdudulot ito ng pagbubukod dahil ang denominator ay zero at hindi namin mahahati ang anumang numero sa zero, na nangangahulugan na ang mga error ay lalabas. Bilang resulta, tumalon ang code sa except block kung saan ginagamit ang 'logging.error'. Ang error ay ang antas ng pag-log. Kung may nangyaring exception, nagpi-print kami ng mensahe o statement na nagsasabing, 'naganap ang exception' at itinakda namin ang 'exc info=true.' Kung hindi namin ito itatakda sa true, ipi-print lang nito ang exception block at hindi ipapakita ang traceback na impormasyon.

Dahil pinili namin ang antas na 'ERROR' sa aming script, ipinapakita muna nito ang root bilang pangalan ng logger, na sinusundan ng mensaheng 'naganap ang pagbubukod.' Ang traceback na impormasyon na kasama ang pangalan ng file, numero ng linya, at module ay ipapakita. Ang susunod na linya ay nagpapakita ng isang abiso ng error dahil ang denominator ay hindi maaaring maging zero. At dahil ang denominator ay zero sa code na ito, ang error ay tinutukoy bilang isang zero-divisor error.

Konklusyon

Sa artikulong ito, tiningnan namin ang proseso ng pag-print ng stacktrace sa isang Python log pati na rin kung paano gamitin ang traceback module upang lumikha ng stack trace. Sa unang halimbawa, na-import ang traceback library at ginamit ang try and except na mga pamamaraan. Ang code ay nakasulat sa try box. Kung may nangyaring exception, mabilis itong lumukso sa exception block at ipinapakita ang exception statement sa screen. Sa pangalawang halimbawa, ginamit namin ang pag-log na katulad ng unang halimbawa. Ang exception() na paraan ay gumagamit ng 'impormasyon' at 'error' na antas ng pag-log. Kung may nangyaring exception, magpapakita ito ng exception statement.