تشغيل mypy وإصلاح أخطاء الأنواع
اضبط mypy وفسّر الأخطاء وأضف الأنواع تدريجياً إلى قاعدة الشيفرة
تشغيل mypy وإصلاح أخطاء الأنواع درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
تثبيت mypy وتشغيله
ثبّت mypy باستخدام pip وشغّله على ملف أو حزمة. فهو يُبلغ عن أخطاء الأنواع دون تنفيذ التعليمات البرمجية.
# pip install mypy
# Check a single file:
# mypy script.py
# Check a package:
# mypy mypackage/
# Strict mode (recommended for new code):
# mypy --strict script.pyأول خطأ في mypy
يكتشف mypy الأنواع غير المتوافقة، والقيم المعادة المفقودة، ومعاملات الدوال التي لا تحتوي على تعليقات.
# script.py
def add(a, b): # mypy: Missing type annotation
return a + b
result: int = add("hello", 1) # str, not int
# mypy output:
# error: Returning Any from function declared to return "int"خيار --strict
يمكّن --strict العديد من عمليات التحقق الإضافية، مثل التعليقات المفقودة، واستخدام Any، وعمليات الاستيراد غير الموصوفة بالأنواع، وغير ذلك. ابدأ بدونه ثم أضفه تدريجيًا.
# Most important strict flags individually:
# --disallow-untyped-defs
# --disallow-any-generics
# --warn-return-any
# --no-implicit-reexport
# Or all at once:
# mypy --strict mypackage/تجاهل الأخطاء
أضف # type: ignore في نهاية السطر لمنع الإبلاغ عن خطأ محدد. استخدم ذلك باعتدال، مع تعليق يوضح السبب.
import third_party # type: ignore[import] # no stub available
x: int = get_dynamic_value() # type: ignore[assignment]إعداد mypy.ini / pyproject.toml
خزّن إعدادات mypy في mypy.ini أو pyproject.toml حتى لا تضطر إلى تمرير الخيارات في كل تشغيل.
# mypy.ini
[mypy]
python_version = 3.11
strict = True
ignore_missing_imports = True
[mypy-third_party.*]
ignore_errors = Trueالوضع التزايدي
يخزّن mypy النتائج مؤقتًا بين عمليات التشغيل. ولا يعيد التحقق إلا من الملفات التي تغيرت، مما يجعل عمليات التشغيل اللاحقة سريعة.
# First run:
# mypy mypackage/ — full analysis, ~5 s
# Second run (nothing changed):
# mypy mypackage/ — Success: no issues in 0 source files (0.3 s)خطأ شائع: أنواع غير متوافقة
الخطأ الأكثر شيوعًا هو إسناد قيمة من النوع الخطأ أو تمريرها.
# error: Incompatible types in assignment
# (expression has type "str", variable has type "int")
count: int = 0
count = "five" # error
# Fix:
count = 5خطأ شائع: عدم تطابق نوع المعامل
تمرير معاملات من أنواع خاطئة إلى دالة.
def greet(name: str) -> str:
return f"Hello, {name}"
# error: Argument 1 to "greet" has incompatible type "int"
greet(42) # error
# Fix:
greet(str(42))خطأ شائع: إعادة None بشكل غير متوقع
دالة معلن أنها تعيد قيمة غير None، لكنها تحتوي على مسار تنفيذي يعيد None.
# error: Missing return statement
def find(items: list[int], target: int) -> int:
for item in items:
if item == target:
return item
# Missing: no return if not found!
# Fix:
def find2(items: list[int], target: int) -> int | None:
for item in items:
if item == target:
return item
return Noneالتضييق باستخدام isinstance
استخدم isinstance لتضييق نوع Union داخل فرع. يفهم mypy ذلك ويضيّق النوع.
def process(value: int | str) -> str:
if isinstance(value, int):
return str(value * 2) # mypy knows value is int here
return value.upper() # mypy knows value is str hereاستخدام cast
يخبر typing.cast(Type, value) mypy بأن يتعامل مع قيمة على أنها من نوع محدد، دون تأثير في وقت التشغيل. استخدمه فقط عندما تكون لديك معرفة أدق من mypy.
from typing import cast
def get_value() -> object:
return 42
result = cast(int, get_value()) # mypy treats result as int
print(result + 1) # 43تحقق سريع
ماذا يفعل وضع # type: ignore في سطر؟
مراجعة
شغّل mypy script.py للتحقق من الأنواع. أصلح عمليات الإسناد غير المتوافقة، وعدم تطابق أنواع المعاملات، والقيم المعادة المفقودة. استخدم isinstance لتضييق الأنواع الموحدة، واستخدم # type: ignore باعتدال، واضبط mypy في mypy.ini. فعّل --strict تدريجيًا.
الأسئلة الشائعة
هل درس «تشغيل mypy وإصلاح أخطاء الأنواع» مجاني؟
نعم — نص درس «تشغيل mypy وإصلاح أخطاء الأنواع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «تشغيل mypy وإصلاح أخطاء الأنواع»؟
اضبط mypy وفسّر الأخطاء وأضف الأنواع تدريجياً إلى قاعدة الشيفرة تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «تشغيل mypy وإصلاح أخطاء الأنواع»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات تعليقات الأنواع
- الأنواع المعقدة: List وDict وOptional وUnion
- TypeVar والفئات العامة وProtocol
- تشغيل mypy وإصلاح أخطاء الأنواع