พิมพ์ Stacktrace ใน Pyhton Log

Phimph Stacktrace Ni Pyhton Log



ชุดของการโทรเข้ามาในช่วงเวลาใดเวลาหนึ่งจะแสดงอยู่ในสแต็กเทรซ เมื่อโปรแกรมแสดงข้อยกเว้น Python จะสร้าง stacktrace หรือที่เรียกว่า traceback หรือ backtrace มีรายละเอียดมากมายใน stacktrace นี้ที่สามารถใช้ประโยชน์เพื่อค้นหาปัญหาได้ แพ็คเกจการบันทึกของ Python มาพร้อมกับคุณสมบัติพื้นฐานหลายอย่างและมีการบันทึกหลายระดับรวมถึง “debug”, “info”, “warning”, “error” และ “critical”

ตัวอย่างที่ 1: พิมพ์ Stacktrace ใน Python โดยใช้ Traceback Module

ในตัวอย่างนี้ เราจะใช้โค้ดง่ายๆ เพื่อสาธิตวิธีการใช้โมดูลการติดตามย้อนกลับของ Python เพื่อพิมพ์การติดตามสแต็ก แพ็คเกจแทร็กแบ็คนี้มีคุณสมบัติยอดนิยมสำหรับการรวบรวม จัดเก็บ และแสดงสแต็กเทรซจากภาษาคอมพิวเตอร์ มันทำซ้ำการดำเนินการพิมพ์สแต็กเทรซของสคริปต์อย่างซื่อสัตย์ หากคุณต้องการดูสแต็กเทรซ สิ่งสำคัญคือ

กล่าวอีกนัยหนึ่ง การติดตามสแต็กจะแสดงการดำเนินการแต่ละอย่างที่เกิดขึ้นก่อนการดำเนินการที่ทำให้เกิดปัญหา ข้อมูลที่สำคัญที่สุดจะถูกรายงานในบรรทัดสุดท้ายของการติดตามสแต็กเสมอ ซึ่งเป็นเวลาที่มีการระบุข้อบกพร่อง สามารถใช้การเรียกใช้ฟังก์ชันทั้งหมดในข้อผิดพลาดที่เป็นผลลัพธ์เพื่อค้นหาและแก้ไขปัญหาได้อย่างรวดเร็ว







เริ่มต้นด้วยการใช้โค้ดผ่านการนำเข้าไลบรารี Python ของ traceback จากนั้นในบรรทัดต่อไปนี้ เราสร้างอาร์เรย์และแสดงรายการองค์ประกอบที่มีค่าบางอย่าง ค่าของรายการอาร์เรย์คือ “7” “8” “9” และ “10” มีสี่ค่าในรายการอาร์เรย์ รายการอาร์เรย์นี้ถูกบันทึกไว้ในตัวแปรเริ่มต้น “A” ก่อนหน้านี้



หลังจากนั้น เราใช้คำว่า 'ลอง' และค่า 'A=6' ในบรรทัดต่อไปนี้ เราใช้บล็อก try-except ใน Python เพื่อจัดการข้อยกเว้น วิธีการนี้ใช้เพื่อเขียนสคริปต์ที่อาจทำให้เกิดข้อผิดพลาดในส่วนหัวของบล็อก ข้อยกเว้นคือข้อผิดพลาดเป็นหลัก คล้ายกับข้อผิดพลาดทางไวยากรณ์ ในระหว่างข้อยกเว้นของโปรแกรม การจัดการข้อยกเว้นเป็นการกระทำเฉพาะในการตอบสนองต่อข้อยกเว้น กลับไปที่สคริปต์ เราใช้ 'ยกเว้น' ในบรรทัดถัดไป



ในบล็อกยกเว้น เราใช้ “traceback.print exc()” ซึ่งย่อมาจาก “ข้อยกเว้นการพิมพ์” เราใช้ฟังก์ชัน “print()” ภายในช่องข้อยกเว้นซึ่งเป็น “จุดสิ้นสุดของโปรแกรม” เพื่อให้คำสั่งนี้พิมพ์ออกมาเมื่อเกิดข้อยกเว้นขึ้น ตอนนี้หากเกิดข้อยกเว้นในช่องลอง โปรแกรมจะย้ายไปยังบล็อกยกเว้นทันทีและดำเนินการต่อ หากไม่เกิดข้อยกเว้น บล็อกข้อยกเว้นจะถูกข้ามไปทั้งหมด เมื่อข้อยกเว้นเกิดขึ้นแล้ว เราจะเห็นในรหัสว่ามีการป้อนค่า '6' ลงในช่องลองแม้ว่าจะไม่ได้อยู่ในรายการอาร์เรย์ก็ตาม ด้วยเหตุนี้ โค้ดจะไปที่ช่องยกเว้นทันทีและพิมพ์คำสั่ง 'จบโปรแกรม' ในการแสดงผล





การเรียกใช้ฟังก์ชันต่างๆ ที่ประกอบขึ้นเป็นการติดตามกลับจะเรียงลำดับจากล่าสุดไปยังล่าสุดน้อยที่สุด จากล่างขึ้นบน การดำเนินการเหล่านี้ทั้งหมดแสดงด้วยคำสั่งสองบรรทัด การโทรแต่ละครั้งจะขึ้นต้นด้วยชื่อไฟล์ หมายเลขลำดับ และชื่อโมดูล ซึ่งทั้งหมดนี้ระบุตำแหน่งของโค้ด หลังจากนั้นจะแสดงคำสั่งพิมพ์ข้อยกเว้น 'สิ้นสุดโปรแกรม' เนื่องจากค่า '6' ไม่ได้อยู่ในรายการที่ประกาศ ซึ่งส่งผลให้เอาต์พุต 'รายการดัชนีอยู่นอกช่วง'



ตัวอย่างที่ 2: พิมพ์ Stacktrace ใน Python โดยใช้เมธอด Logging.Exception()

ในตัวอย่างนี้ เราจะสาธิตวิธีใช้เมธอด “logging.exception()” ของ Python เพื่อส่งออก stacktrace แพ็คเกจการบันทึกใน Python ช่วยให้เราบันทึกข้อผิดพลาดรวมถึงบันทึกข้อผิดพลาดและข้อยกเว้น โมดูลการบันทึกทำให้เรามีโมดูลการบันทึกให้เลือกมากมาย รวมถึง 'แก้ไขข้อบกพร่อง' 'ข้อมูล' 'คำเตือน' 'ข้อผิดพลาด' และ 'สำคัญ' สิ่งเหล่านี้เป็นเลเยอร์ของโมดูลการบันทึกโดยพื้นฐานแล้ว พูดง่ายๆ ก็คือ หากต้องการบันทึกข้อยกเว้นที่มีข้อผิดพลาดใน Python ให้ใช้ฟังก์ชัน “logging.exception()” ฟังก์ชันนี้จะเพิ่มรายงานที่มีสถานะ ERROR ให้กับตัวบันทึกนี้ เชื่อว่าพารามิเตอร์มีไว้สำหรับการดีบัก ข้อมูลเกี่ยวกับข้อยกเว้นจะแนบมากับรายงานการบันทึก ตำแหน่งเดียวที่จะเรียกใช้ขั้นตอนนี้ควรเป็นตัวจัดการข้อยกเว้น

ทีนี้มาดูรหัสกัน ขั้นแรก เรานำเข้าไลบรารีสองรายการ โดยไลบรารีแรกคือการบันทึก และไลบรารีที่สองคือการติดตามย้อนกลับ จากนั้น เราใช้วิธี 'basicConfig' กับ 'การบันทึก' และระบุระดับเป็น 'logging.Debug' อาร์กิวเมนต์เดียวที่เมธอด “getLogger()” ใช้คือ “ชื่อ” ดังนั้นเราจึงใช้มันเมื่อใช้ฟังก์ชัน “logging.getlogger” หากมีการระบุชื่อ การอ้างอิงถึงอินสแตนซ์ตัวบันทึกที่มีชื่อนั้นจะถูกสร้างขึ้น มิฉะนั้นรากจะถูกส่งกลับ วัตถุตัวบันทึกเดียวกันถูกอ้างอิงโดยการดำเนินการ getLogger() จำนวนมากด้วยข้อมูลเฉพาะตัวเดียวกัน

จากนั้น เราใช้การลอง และอย่างที่เราทราบในบล็อกการลอง เราเขียนโค้ดที่อาจก่อให้เกิดข้อยกเว้น ในกรณีนี้ เราใช้ “myfunction()” หากสถานการณ์ที่กำหนดไม่ตรงกัน จะเกิดข้อยกเว้น จากนั้นโค้ดจะกระโดดไปที่บล็อกยกเว้นทันที ในบล็อกข้อยกเว้นนี้ เราใช้ “logging.info” ข้างในเขียนข้อความที่เราต้องการพิมพ์ว่า เนื่องจากหากมีข้อยกเว้นเกิดขึ้น ข้อผิดพลาดก็เกิดขึ้น จากนั้นระบบจะแสดงข้อความนี้บนหน้าจอ แต่ถ้าข้อผิดพลาดไม่เกิดขึ้น ก็จะละเว้นข้อความแสดงข้อยกเว้นทั้งหมด

เรายังตั้งค่า “exc info=True” ด้วยข้อความ stacktrace ทั้งหมดจะรวมอยู่ในการบันทึกเมื่อข้อมูล exc ถูกตั้งค่าเป็น True ซึ่งคล้ายกับสิ่งที่เกิดขึ้นกับ “logger.exception()” ข้อแตกต่างเพียงอย่างเดียวคือคุณสามารถเปลี่ยนระดับบันทึกจากข้อผิดพลาดเป็นอย่างอื่นได้อย่างรวดเร็วโดยเพียงแค่เปลี่ยนตัวบันทึก

เมื่อเกิดข้อยกเว้นในสคริปต์แล้ว เอาต์พุตบรรทัดแรกคือข้อความ 'ข้อยกเว้นเกิดขึ้น' ตามด้วยระดับการบันทึกที่ใช้ในสคริปต์ซึ่งก็คือ 'ข้อมูล' ชื่อคนตัดไม้จะปรากฏเป็นรากในกรณีนี้ จากนั้น การเรียก traceback จะปรากฏขึ้น โดยแสดงโมดูล บรรทัด และชื่อไฟล์ สุดท้าย ไม่ได้กำหนดข้อความแสดงข้อผิดพลาด “myfunction”

เรามาพูดถึงโค้ดเพิ่มเติมที่ใช้การบันทึก ข้อยกเว้น () วิธีการเริ่มต้นด้วยการนำเข้าไลบรารีสำหรับการบันทึก ถัดไป ตัวแปรสองตัว – “m” และ “n” – ได้รับการกำหนดค่าเริ่มต้นและกำหนดค่าเป็น “7” และ “0” ตามลำดับ บล็อกการลองถูกใช้ในขั้นตอนต่อไป ภายในนั้น เราเขียนโค้ดที่อาจทำให้เกิดข้อยกเว้น อันดับแรก เราประกาศตัวแปร “o” จากนั้น เรากำหนดให้ “m” หารด้วย “n” สิ่งนี้ทำให้เกิดข้อยกเว้นเนื่องจากตัวส่วนเป็นศูนย์และเราไม่สามารถหารจำนวนใด ๆ ด้วยศูนย์ได้ ซึ่งหมายความว่าข้อผิดพลาดจะเกิดขึ้น เป็นผลให้รหัสกระโดดไปที่บล็อกยกเว้นที่ใช้ 'logging.error' ข้อผิดพลาดคือระดับของการบันทึก ถ้าเกิดข้อยกเว้นขึ้น เราจะพิมพ์ข้อความหรือข้อความที่ระบุว่า 'เกิดข้อยกเว้น' และตั้งค่าเป็น 'exc info=true' หากเราไม่ตั้งค่าเป็นจริง ระบบจะพิมพ์เฉพาะบล็อกข้อยกเว้นและไม่แสดงข้อมูลการติดตามย้อนกลับ

เนื่องจากเราเลือกระดับ 'ข้อผิดพลาด' ในสคริปต์ของเรา สคริปต์จึงแสดงรูทเป็นชื่อตัวบันทึกก่อน ตามด้วยข้อความ 'เกิดข้อยกเว้น' ข้อมูลการย้อนกลับซึ่งรวมถึงชื่อไฟล์ หมายเลขบรรทัด และโมดูลจะแสดงขึ้น บรรทัดถัดไปจะแสดงการแจ้งเตือนข้อผิดพลาดเนื่องจากตัวส่วนไม่สามารถเป็นศูนย์ได้ และเนื่องจากตัวส่วนเป็นศูนย์ในโค้ดนี้ ข้อผิดพลาดนี้จึงเรียกว่าข้อผิดพลาดที่มีตัวหารเป็นศูนย์

บทสรุป

ในบทความนี้ เราจะตรวจสอบกระบวนการพิมพ์ stacktrace ในบันทึก Python รวมถึงวิธีใช้โมดูล traceback เพื่อสร้าง stack trace ในตัวอย่างแรก ไลบรารีการย้อนกลับถูกอิมพอร์ตและใช้วิธีลองและยกเว้น รหัสถูกเขียนในช่องลอง ถ้าเกิดข้อยกเว้น มันจะกระโดดไปที่บล็อกข้อยกเว้นอย่างรวดเร็วและแสดงคำสั่งข้อยกเว้นบนหน้าจอ ในตัวอย่างที่สอง เราใช้การบันทึกซึ่งคล้ายกับตัวอย่างแรก ข้อยกเว้น () วิธีการใช้ระดับ 'ข้อมูล' และ 'ข้อผิดพลาด' ของการบันทึก หากเกิดข้อยกเว้น จะแสดงคำสั่งข้อยกเว้น