أخطاء بايثون هي جزء من عملية البرمجة. يمكن أن تكون الأخطاء محبطة، لكنها يمكن أن تكون أيضًا فرصة للتعلم. في هذا الدليل، سنقدم لك نظرة عامة على أنواع أخطاء بايثون الشائعة وكيفية إصلاحها. سنناقش أيضًا بعض النصائح لتجنب الأخطاء في المستقبل.
تعد أخطاء بايثون جزءًا طبيعيًا من عملية البرمجة. يمكن أن تحدث الأخطاء بسبب مجموعة متنوعة من الأسباب، مثل الأخطاء في القواعد، أو الأخطاء في الأنواع، أو الأخطاء في الإستثناءات، أو الأخطاء في القيمة.
أنواع أخطاء بايثون الشائعة
فيما يلي بعض أنواع أخطاء بايثون الشائعة:
أخطاء القواعد
أخطاء القواعد هي أخطاء تحدث عندما لا يتوافق كود بايثون مع قواعد اللغة. يمكن أن تحدث هذه الأخطاء بسبب مجموعة متنوعة من الأسباب، مثل:
- كتابة الاسم بشكل غير صحيح. على سبيل المثال، قد يحدث خطأ قواعد إذا تم كتابة “name” بدلاً من “Name”.
- استخدام اسم متغير أو دالة غير محدد. على سبيل المثال، قد يحدث خطأ قواعد إذا تم محاولة الوصول إلى متغير تم إعلانه في كتلة أخرى.
- استخدام اسم متغير أو دالة تم تعريفه بالفعل في مكان آخر. على سبيل المثال، قد يحدث خطأ قواعد إذا تم محاولة تعريف دالة باسم تم استخدامه بالفعل في وحدة أخرى.
- استخدام تركيبة نحوية غير صالحة. على سبيل المثال، قد يحدث خطأ قواعد إذا تم استخدام الأقواس أو النقطتين بشكل غير صحيح.
أمثلة على أخطاء القواعد
فيما يلي بعض الأمثلة على أخطاء القواعد:
خطأ في الاسم:
name = "kader"
print(namee)
سيؤدي هذا الكود إلى الخطأ التالي:
SyntaxError: invalid syntax
هذا لأن اسم المتغير “namee” غير صالح.
خطأ في عدم التعريف:
print(name)
سيؤدي هذا الكود إلى الخطأ التالي:
NameError: name 'name' is not defined
هذا لأن المتغير “name” غير محدد.
خطأ في التعارض:
def add(x, y):
return x + y
def add(x, y, z):
return x + y + z
سيؤدي هذا الكود إلى الخطأ التالي:
TypeError: name 'add' is already defined
هذا لأن دالة باسم “add” تم تعريفها بالفعل.
خطأ في التركيب:
if x > 0:
print(x)
else:
print(-x)
سيؤدي هذا الكود إلى الخطأ التالي:
SyntaxError: expected ':' after 'if'
هذا لأن علامة :
مفقودة بعد الكلمة المفتاحية if
.
كيفية إصلاح أخطاء القواعد
لإصلاح أخطاء القواعد، يجب على المبرمجين تحديد سبب حدوث الخطأ. يمكن القيام بذلك عن طريق مراجعة رسالة الخطأ وفحص الكود بحثًا عن أي أخطاء في القواعد. بمجرد تحديد سبب الخطأ، يمكن للمبرمجين إجراء التغييرات اللازمة على الكود لإصلاحه.
نصائح لتجنب أخطاء القواعد
فيما يلي بعض النصائح لتجنب أخطاء القواعد:
- اقرأ قواعد اللغة بعناية.
- استخدم محرر أكواد يساعدك على اكتشاف الأخطاء.
- استخدم أداة تصحيح الأخطاء لتحديد الأخطاء.
أخطاء القواعد الشائعة
فيما يلي بعض أخطاء القواعد الشائعة:
- خطأ في الاسم: يحدث هذا الخطأ عندما يتم استخدام اسم متغير أو دالة أو أي كيان آخر بشكل غير صحيح.
- خطأ في عدم التعريف: يحدث هذا الخطأ عندما تتم محاولة الوصول إلى متغير أو دالة غير محددة.
- خطأ في التعارض: يحدث هذا الخطأ عندما يتم تعريف كيان بنفس الاسم مرتين.
- خطأ في التركيب: يحدث هذا الخطأ عندما لا يتم استخدام تركيبة نحوية بشكل صحيح.
أخطاء الأنواع
هي أخطاء تحدث عندما يتم استخدام نوع بيانات غير صحيح في مكان ما. يمكن أن تحدث هذه الأخطاء بسبب مجموعة متنوعة من الأسباب، مثل:
- محاولة استخدام قيمة عددية في مكان يجب أن تكون فيه سلسلة. على سبيل المثال، قد يحدث خطأ نوع إذا تم محاولة طباعة سلسلة تحتوي على رقم.
- محاولة استخدام قيمة سلسلة في مكان يجب أن تكون فيه عددًا. على سبيل المثال، قد يحدث خطأ نوع إذا تم محاولة حساب مجموع عددين يتم تمثيلهما كسلسلة.
- محاولة استخدام نوع بيانات غير متوافق في عملية حسابية. على سبيل المثال، قد يحدث خطأ نوع إذا تم محاولة قسمة عدد صحيح على عدد عشري.
أمثلة على أخطاء الأنواع
فيما يلي بعض الأمثلة على أخطاء الأنواع:
x = 1
print("The value of x is: " + x)
سيؤدي هذا الكود إلى الخطأ التالي:
TypeError: can't convert int to str
هذا لأن قيمة المتغير “x” هي عدد صحيح، ولكن يتم محاولة طباعتها كسلسلة.
مثال أخر:
x = "123"
y = int(x)
print(x + y)
سيؤدي هذا الكود إلى الخطأ التالي:
TypeError: can't convert string to int
هذا لأن قيمة المتغير “x” هي سلسلة، ولكن يتم محاولة تحويلها إلى عدد صحيح.
x = 1
y = "2"
print(x / y)
سيؤدي هذا الكود إلى الخطأ التالي:
TypeError: unsupported operand type(s) for /: 'int' and 'str'
هذا لأن المتغيرات “x” و “y” لهما أنواع بيانات غير متوافقة.
كيفية إصلاح أخطاء الأنواع
لإصلاح أخطاء الأنواع، يجب على المبرمجين تحديد سبب حدوث الخطأ. يمكن القيام بذلك عن طريق مراجعة رسالة الخطأ وفحص الكود بحثًا عن أي أخطاء في الأنواع. بمجرد تحديد سبب الخطأ، يمكن للمبرمجين إجراء التغييرات اللازمة على الكود لإصلاحه.
فيما يلي بعض النصائح لإصلاح أخطاء الأنواع:
- اقرأ رسالة الخطأ بعناية. تحتوي رسالة الخطأ عادةً على معلومات مهمة حول سبب حدوث الخطأ.
- تحقق من أنواع بياناتك. تأكد من استخدام نوع البيانات الصحيح في كل مكان.
- ستخدم أداة تصحيح الأخطاء لتحديد الأخطاء. يمكن أن تساعدك أداة التصحيح في تحديد أخطاء الأنواع بسرعة وسهولة.
أخطاء الأنواع الشائعة
فيما يلي بعض أخطاء الأنواع الشائعة:
- خطأ في النوع: يحدث هذا الخطأ عندما يتم استخدام نوع بيانات غير صحيح في مكان ما.
- خطأ في التحويل: يحدث هذا الخطأ عندما يتم محاولة تحويل قيمة من نوع بيانات إلى نوع بيانات آخر غير متوافق.
- خطأ في المقارنة: يحدث هذا الخطأ عندما يتم محاولة مقارنة قيمتين لهما أنواع بيانات غير متوافقة.
- خطأ في العملية الحسابية: يحدث هذا الخطأ عندما يتم محاولة إجراء عملية حسابية على قيمتين لهما أنواع بيانات غير متوافقة.
نصائح لتجنب أخطاء الأنواع
فيما يلي بعض النصائح لتجنب أخطاء الأنواع:
- افهم أنواع البيانات في بايثون. كل نوع بيانات له خصائصه الخاصة. من المهم أن تفهم هذه الخصائص لتجنب الأخطاء.
- استخدم التحويلات بشكل صحيح. إذا كنت بحاجة إلى تحويل قيمة من نوع بيانات إلى نوع بيانات آخر، فتأكد من استخدام التحويل الصحيح.
- تحقق من أنواع البيانات الخاصة بك قبل إجراء العمليات الحسابية أو المقارنات. سيساعدك ذلك في تجنب الأخطاء.
أخطاء الإستثناءات
هي أخطاء تحدث عندما يحدث خطأ غير متوقع أثناء تشغيل البرنامج. يمكن أن تحدث هذه الأخطاء بسبب مجموعة متنوعة من الأسباب، مثل:
- محاولة الوصول إلى متغير غير محدد.
- محاولة تقسيم عدد صحيح على صفر.
- محاولة فتح ملف غير موجود.
- محاولة كتابة إلى ملف لا يمكن الكتابة إليه.
- محاولة قراءة من ملف فارغ.
أمثلة على أخطاء الإستثناءات
فيما يلي بعض الأمثلة على أخطاء الإستثناءات:
خطأ في عدم التعريف:
print(name)
سيؤدي هذا الكود إلى الخطأ التالي:
NameError: name 'name' is not defined
هذا لأن المتغير “name” غير محدد.
خطأ في التقسيم على صفر:
x = 1
y = 0
print(x / y)
سيؤدي هذا الكود إلى الخطأ التالي:
ZeroDivisionError: division by zero
هذا لأن محاولة تقسيم عدد صحيح على صفر خطأ غير متوقع.
خطأ في فتح الملف:
file = open("my_file.txt")
print(file.read())
سيؤدي هذا الكود إلى الخطأ التالي:
FileNotFoundError: [Errno 2] No such file or directory: 'my_file.txt'
هذا لأن الملف “my_file.txt” غير موجود.
خطأ في الكتابة إلى الملف:
file = open("my_file.txt", "w")
file.write("Hello, world!")
file.close()
سيؤدي هذا الكود إلى الخطأ التالي:
PermissionError: [Errno 13] Permission denied: 'my_file.txt'
هذا لأن الملف “my_file.txt” محمي ضد الكتابة.
خطأ في القراءة من الملف:
file = open("my_file.txt", "r")
print(file.read())
سيؤدي هذا الكود إلى الخطأ التالي:
FileNotFoundError: [Errno 2] No such file or directory: 'my_file.txt'
هذا لأن الملف “my_file.txt” فارغ.
كيفية التعامل مع أخطاء الإستثناءات
يمكن للمبرمجين التعامل مع أخطاء الإستثناءات باستخدام بنية try-except
. تسمح هذه البنية للمبرمجين بتحديد التعليمات البرمجية التي يجب تنفيذها إذا حدث خطأ غير متوقع.
فيما يلي مثال على كيفية التعامل مع خطأ في عدم التعريف باستخدام بنية try-except
:
try:
print(name)
except NameError:
print("The variable 'name' is not defined.")
سيؤدي هذا الكود إلى طباعة الرسالة التالية إذا لم يتم تعريف المتغير name
:
The variable 'name' is not defined.
أخطاء الإستثناءات الشائعة
فيما يلي بعض أخطاء الإستثناءات الشائعة:
- خطأ في عدم التعريف: يحدث هذا الخطأ عندما تتم محاولة الوصول إلى متغير غير محدد.
- خطأ في التقسيم على صفر: يحدث هذا الخطأ عندما تتم محاولة تقسيم عدد صحيح على صفر.
- خطأ في فتح الملف: يحدث هذا الخطأ عندما تتم محاولة فتح ملف غير موجود أو محمي ضد الكتابة.
- خطأ في الكتابة إلى الملف: يحدث هذا الخطأ عندما تتم محاولة الكتابة إلى ملف محمي ضد الكتابة.
- خطأ في القراءة من الملف: يحدث هذا الخطأ عندما تتم محاولة قراءة من ملف فارغ.
نصائح لتجنب أخطاء الإستثناءات
فيما يلي بعض النصائح لتجنب أخطاء الإستثناءات:
- استخدم بنية try-except لمعالجة أخطاء الإستثناءات.
- تحقق من القيم التي تدخلها إلى وظائفك وطرقك.
- تحقق من أن الملفات موجودة وقابلة للكتابة قبل محاولة فتحها أو الكتابة إليها.
- تحقق من أن الملفات ليست فارغة قبل محاولة قراءة منها.
أخطاء القيمة
هي أخطاء تحدث عندما لا تتوافق قيمة المتغير مع ما توقعه البرنامج. يمكن أن تحدث هذه الأخطاء بسبب مجموعة متنوعة من الأسباب، مثل:
- محاولة تعيين قيمة غير صحيحة لمتغير. على سبيل المثال، قد يحدث خطأ قيمة إذا تم محاولة تعيين قيمة سلسلة لمتغير عدد صحيح.
- محاولة مقارنة قيمتين لهما أنواع بيانات غير متوافقة. على سبيل المثال، قد يحدث خطأ قيمة إذا تم محاولة مقارنة سلسلة بعدد صحيح.
- محاولة إجراء عملية حسابية على قيمتين لهما أنواع بيانات غير متوافقة. على سبيل المثال، قد يحدث خطأ قيمة إذا تم محاولة قسمة عدد صحيح على سلسلة.
فيما يلي بعض الأمثلة على أخطاء القيمة:
خطأ في التعيين:
x = "Hello, world!"
x = 1
سيؤدي هذا الكود إلى الخطأ التالي:
TypeError: can't convert str to int
هذا لأن قيمة المتغير “x” هي سلسلة، ولكن يتم محاولة تعيينها إلى عدد صحيح.
خطأ في المقارنة:
x = "Hello, world!"
y = 1
if x == y:
print("The values are equal.")
سيؤدي هذا الكود إلى الخطأ التالي:
TypeError: can't compare str to int
هذا لأن المتغيرين “x” و “y” لهما أنواع بيانات غير متوافقة.
خطأ في العملية الحسابية:
x = "Hello, world!"
y = "123"
print(x + y)
سيؤدي هذا الكود إلى الخطأ التالي:
TypeError: unsupported operand type(s) for +: 'str' and 'str'
هذا لأن المتغيرين “x” و “y” لهما أنواع بيانات غير متوافقة.
كيفية إصلاح أخطاء القيمة
لإصلاح أخطاء القيمة، يجب على المبرمجين تحديد سبب حدوث الخطأ. يمكن القيام بذلك عن طريق مراجعة رسالة الخطأ وفحص الكود بحثًا عن أي أخطاء في القيمة. بمجرد تحديد سبب الخطأ، يمكن للمبرمجين إجراء التغييرات اللازمة على الكود لإصلاحه.
فيما يلي بعض النصائح لإصلاح أخطاء القيمة:
- اقرأ رسالة الخطأ بعناية. تحتوي رسالة الخطأ عادةً على معلومات مهمة حول سبب حدوث الخطأ.
- تحقق من أنواع البيانات الخاصة بك. تأكد من استخدام نوع البيانات الصحيح في كل مكان.
- تحقق من القيم التي تدخلها إلى وظائفك وطرقك.
أخطاء القيمة الشائعة
فيما يلي بعض أخطاء القيمة الشائعة:
- خطأ في التعيين: يحدث هذا الخطأ عندما يتم محاولة تعيين قيمة غير صحيحة لمتغير.
- خطأ في المقارنة: يحدث هذا الخطأ عندما يتم محاولة مقارنة قيمتين لهما أنواع بيانات غير متوافقة.
- خطأ في العملية الحسابية: يحدث هذا الخطأ عندما يتم محاولة إجراء عملية حسابية على قيمتين لهما أنواع بيانات غير متوافقة.
نصائح لتجنب أخطاء القيمة
فيما يلي بعض النصائح لتجنب أخطاء القيمة:
- افهم أنواع البيانات في بايثون. كل نوع بيانات له خصائصه الخاصة. من المهم أن تفهم هذه الخصائص لتجنب الأخطاء.
- تحقق من أنواع البيانات الخاصة بك قبل إجراء عمليات التعيين أو المقارنة أو العمليات الحسابية. سيساعدك ذلك في تجنب الأخطاء.
تصحيح الأخطاء باستخدام Pdb
Pdb هو اختصار لـ Python Debugger. إنه أداة تصحيح أخطاء قوية يمكنها مساعدتك في تحديد وإصلاح الأخطاء في برنامجك.
كيفية استخدام Pdb
لبدء استخدام Pdb، يمكنك إدخال الأمر التالي في سطر الأوامر:
python -m pdb my_program.py
سيؤدي هذا إلى تشغيل برنامجك في وضع التصحيح. عند حدوث خطأ، سيتم إيقاف برنامجك وسيدخل Pdb في الوضع المستند.
في الوضع المستند، يمكنك استخدام الأوامر التالية للتنقل في البرنامج وفحص قيم المتغيرات:
- l: اعرض سطر الكود الحالي.
- n: انتقل إلى السطر التالي من الكود.
- s: انتقل إلى السطر التالي من الكود، ولكن قم بتنفيذه.
- p variable_name: اعرض قيمة المتغير.
- c: تابع تشغيل البرنامج حتى حدوث خطأ آخر أو حتى الوصول إلى نقطة التوقف التالية.
أمثلة على استخدام Pdb
فيما يلي بعض الأمثلة على كيفية استخدام Pdb لتصحيح الأخطاء:
- لعرض سطر الكود الحالي:
(Pdb) l
سيؤدي هذا إلى عرض السطر الحالي من الكود. - للانتقال إلى السطر التالي من الكود:
(Pdb) n
سيؤدي هذا إلى الانتقال إلى السطر التالي من الكود. - لعرض قيمة المتغير:
(Pdb) p x
سيؤدي هذا إلى عرض قيمة المتغير “x”. - لمتابعة تشغيل البرنامج حتى حدوث خطأ آخر:
(Pdb) c
سيؤدي هذا إلى متابعة تشغيل البرنامج حتى حدوث خطأ آخر.
نصائح لاستخدام Pdb
فيما يلي بعض النصائح لاستخدام Pdb:
- استخدم الأمر “l” لعرض سطر الكود الحالي. سيساعدك ذلك في تحديد سبب حدوث الخطأ.
- استخدم الأمر “p” لعرض قيمة المتغير. سيساعدك ذلك في تحديد سبب حدوث الخطأ.
- استخدم الأمر “s” لتنفيذ سطر واحد من الكود في كل مرة. سيساعدك ذلك في تحديد سبب حدوث الخطأ.
- استخدم الأمر “c” لمتابعة تشغيل البرنامج حتى حدوث خطأ آخر. سيساعدك ذلك في تحديد سبب حدوث الخطأ.
تصحيح الأخطاء باستخدام Pdb
يمكنك استخدام Pdb لتصحيح الأخطاء في برنامجك باتباع الخطوات التالية:
- قم بتشغيل برنامجك في وضع التصحيح باستخدام الأمر “python -m pdb my_program.py”.
- عند حدوث خطأ، سيتم إيقاف برنامجك وسيدخل Pdb في الوضع المستند.
- استخدم الأوامر المذكورة أعلاه لتتبع سبب حدوث الخطأ.
- بمجرد تحديد سبب الخطأ، يمكنك إجراء التغييرات اللازمة على الكود لإصلاحه.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.