استثناء السيطرة
إجراء تحليل ثابت محدود للاستثناءات غير المطلوبة في ملف Python.
هذا هو ️ WIP ️ . تحقق من السلوك المختبر ، والسلوك غير المختبر والقيود.
الاستخدام
للتحقق من الاستثناءات غير المطلوبة في ملف Python:
python3 main.py [filename]
دعم الملفات المتعددة محدود ، ولكن يمكنك تجربة هذا:
python3 main.py <(cat [file1] [file2]...)
السلوك المختبر
تم التحقق من السلوك التالي للاختبارات/اختبار ملفات الاختبار المضمنة والاختبارات/test2.py:
- يكتشف الاستثناءات التي أثيرت يدويًا بواسطة الوظائف (
raise Exception ). - يكتشف الاستثناءات التي أثيرت عن طريق استدعاء وظائف خارج كتل المحاولة ، بما في ذلك الوظائف المعرفة من قبل المستخدم التي تثير الاستثناءات ، وكذلك بعض وظائف Python المدمجة مثل
open() . - يكتشف الاستثناءات التي أثيرت باستخدام مشغلي مثل فهرسة
arr[index] وتقسيم a / b أو a // b - يستبعد الاستثناءات التي تم اكتشافها
except Exception: الجمل من التقرير وتفهم التسلسل الهرمي الاستثناء. - يستثني الاستثناءات الموثقة في دكات الوظائف من التقرير.
السلوك غير المختبر
- قد تفشل مع المحاولة المتداخلة/باستثناء الكتل.
- يجب إجراء اختبار أكثر شمولاً للكشف عن قيود إضافية.
القيود
- سوف تفوت الكثير من الاستثناءات:
- نظرًا لأن Python هي لغة ديناميكية مع كتابة البط ، فهناك العديد من الاستثناءات التي لا يمكن اكتشافها بشكل ثابت.
- الاستثناءات التي تثيرها الوظائف الأكثر شعبية غير موثقة وبالتالي غير مرئية من الخارج.
- يتم تخزين الاستثناءات بالاسم. إذا كان هناك العديد من
TypeError في وظيفة ، فسيتم الإبلاغ عن آخر مرة.
- سيقومون بالإبلاغ عن استثناءات حتى لو لم يتم رفعها أبدًا في التنفيذ:
- نظرًا لكونها أداة تحليل ثابتة ، فإنها لا تتبع متغيرًا على طول الكود أو تحديد قيمه المحتملة.
- لهذا السبب ، سيتم الإبلاغ عن الاستثناءات لأي عمليات فهرسة أو تقسيم بغض النظر عما إذا كانت "آمنة" أم لا.
- لا يعمل بشكل جيد مع الفصول أو الاستثناءات المخصصة:
- يمكن أن يكون هناك العديد من الفئات في مستند واحد مع طرق في فئات مختلفة تشارك نفس الاسم.
- هناك العديد من الطرق لإقامة فصل دراسي واستدعاء أساليبها.
- من المستحيل ، في بعض الحالات ، تحديد فئة المتغير والوظيفة التي تسمى باستخدام التحليل الثابت.
- لا يدعم المكتبات الخارجية:
- المكتبات الخارجية غير مدعومة ، لكن الكود قابل للتمديد بما يكفي لجعل إدراجها في المستقبل.
- دعم لملفات متعددة محدود:
- يتم دعم ملفات متعددة من خلال استبدال عملية باش.
python3 main.py <(cat [file1] [file2]...) - ستكون أرقام الأسطر بالنسبة للملفات المدمجة وليس لكل ملف.
- يتم البحث عن الوظائف بالاسم ، لذا لن يتم إعادة تسمية الوظائف
from <module> import <function> as <new_name> .