การควบคุมข้อยกเว้น
ทำการวิเคราะห์แบบคงที่ จำกัด สำหรับข้อยกเว้นที่ไม่ได้รับการยกเว้นในไฟล์ Python
นี่คือ เช็ด - ตรวจสอบพฤติกรรมที่ผ่านการทดสอบพฤติกรรมที่ยังไม่ผ่านการทดสอบและข้อ จำกัด
การใช้งาน
เพื่อตรวจสอบข้อยกเว้นที่ไม่ได้รับการยกเว้นในไฟล์ Python:
python3 main.py [filename]
การสนับสนุนหลายไฟล์มี จำกัด แต่คุณสามารถลองได้:
python3 main.py <(cat [file1] [file2]...)
พฤติกรรมที่ผ่านการทดสอบ
พฤติกรรมต่อไปนี้ได้รับการตรวจสอบสำหรับการทดสอบไฟล์ทดสอบ/test.py และทดสอบ/test2.py:
- ตรวจจับข้อยกเว้นที่ยกขึ้นด้วยตนเองโดยฟังก์ชั่น (
raise Exception ) - ตรวจจับข้อยกเว้นที่เกิดขึ้นจากฟังก์ชั่นการโทรออกนอกบล็อก Except ซึ่งรวมถึงฟังก์ชั่นที่ผู้ใช้กำหนดซึ่งเพิ่มข้อยกเว้นรวมถึงฟังก์ชั่น Python ในตัวเช่น
open() - ตรวจจับข้อยกเว้นที่เพิ่มขึ้นโดยใช้ตัวดำเนินการเช่นการจัดทำดัชนี
arr[index] และหาร a / b หรือ a // b - ไม่รวมข้อยกเว้นที่จับได้
except Exception: ข้อจากรายงานและเข้าใจลำดับชั้นข้อยกเว้น - ไม่รวมข้อยกเว้นที่บันทึกไว้ในฟังก์ชั่นเอกสารจากรายงาน
พฤติกรรมที่ยังไม่ทดลอง
- อาจล้มเหลวด้วยการลอง/ยกเว้นบล็อก
- ต้องทำการทดสอบที่ครอบคลุมมากขึ้นเพื่อตรวจสอบข้อ จำกัด เพิ่มเติม
ข้อ จำกัด
- จะพลาดข้อยกเว้นมากมาย:
- เนื่องจาก Python เป็นภาษาแบบไดนามิกที่มีการพิมพ์เป็ดมีข้อยกเว้นมากมายที่ไม่สามารถตรวจพบได้แบบคงที่
- ข้อยกเว้นที่เกิดขึ้นจากฟังก์ชั่นยอดนิยมส่วนใหญ่ไม่มีเอกสารและไม่สามารถมองเห็นได้จากภายนอก
- ข้อยกเว้นจะถูกเก็บไว้ในชื่อ หากมีหลาย
TypeError ในฟังก์ชั่นจะมีการรายงานเฉพาะคนสุดท้ายเท่านั้น
- จะรายงานข้อยกเว้นแม้ว่าพวกเขาจะไม่ได้รับการดำเนินการในการดำเนินการ:
- เนื่องจากเป็นเครื่องมือวิเคราะห์แบบคงที่จึงไม่เป็นไปตามตัวแปรตามรหัสหรือกำหนดค่าที่เป็นไปได้
- นั่นคือเหตุผลที่จะมีการรายงานข้อยกเว้นสำหรับการจัดทำดัชนีหรือการดำเนินงานส่วนใด ๆ ไม่ว่าพวกเขาจะ "ปลอดภัย" หรือไม่
- ใช้งานไม่ได้กับชั้นเรียนหรือข้อยกเว้นที่กำหนดเอง:
- อาจมีคลาสมากมายในเอกสารเดียวที่มีวิธีการในคลาสต่าง ๆ ที่ใช้ชื่อเดียวกัน
- มีหลายวิธีในการสร้างอินสแตนซ์คลาสและเรียกวิธีการของมัน
- ในบางกรณีเป็นไปไม่ได้ที่จะกำหนดคลาสของตัวแปรและฟังก์ชั่นที่เรียกว่าการใช้การวิเคราะห์แบบคงที่
- ไม่รองรับไลบรารีภายนอก:
- ไลบรารีภายนอกไม่ได้รับการสนับสนุน แต่รหัสสามารถขยายได้เพียงพอที่จะทำให้สามารถรวมไว้ในอนาคตได้
- การรองรับหลายไฟล์มี จำกัด :
- การสนับสนุนสำหรับหลาย ๆ ไฟล์จะทำผ่านการทดแทนกระบวนการ Bash
python3 main.py <(cat [file1] [file2]...) - หมายเลขบรรทัดจะสัมพันธ์กับไฟล์ที่ผสานและไม่ใช่ต่อไฟล์
- ฟังก์ชั่นจะถูกค้นหาด้วยชื่อดังนั้นจึงไม่สามารถตรวจพบฟังก์ชั่น
from <module> import <function> as <new_name> จะไม่ถูกตรวจพบ