طيب يا جماعة السلام عليكم في المحاضرة الماضية
تقريبا خلصنا موضوع القراءة والكتابة من الملفات
طبعا احنا غطينا ال basics بعد هيك هنشوف أمثلة أو
هنحل أسئلة تطبيقية بس قبل ما نخلص أو قبل ما نبدأ
بالأسئلة في لسه جزئية في ال chapter مخلصنهاش اللي
هي حاجة اسمها ال exception
Exception Handling بالموضوع
المهم والموجود في كل لغة البرمجة بدنا نفهم إيش
المقصود بال exception handling و كيف نفهمه كلمة
exception الترجمة الحرفية هي إيش؟ إيش يعني معناها؟
except يعني إيش؟ استثناء أو باستثناء كلمة
exception الترجمة الحرفية إيش؟ استثناء تمام؟
في البرمجة لما نحكي exception المقصود فيها error
خطأ خطأ حصل في البرنامج لكن مش syntax error تمام؟
مش syntax error run-time error في فرق بين ال run
-time error و بين ال syntax error ال syntax error
هو خطأ في الكتابة طبعا يعني أنا مثلا method بدها
parameter مابعتش parameter هذا خطأ طبعا كتابة
keywords مش موجودة أو كلمة حاجة غلط مثلا ال form
المفروض تكون small كتبتها F capital هذا غلط هذا
syntax خطأ في الكتابة طبعا ال syntax error على طول
بيبين مين بيبين اللي هي ال compiler يعني ال
compiler بيقول إنه مرات بعلمني الكلمة هذا بالأحمر
بيقولي هذا خطأ عندك صح ولا هذا كله بنسميه syntax
error في حاجة تانية اسمها run-time error إيش هي
كلمة run-time؟ أثناء التنفيذ طبعا أثناء التنفيذ
ممكن تحصل أخطاء معناه طبعا ال run-time error ممكن
يعني أن ال code ممكن يكون صح لكن مع هيك أثناء
التنفيذ ممكن يحصل خطأ في غالبية الأحيان ال run
-time error ممكن يشير لأخطاء مش في كتابة ال code
أخطاء أثناء التنفيذ لا يمكن تلاقي فيها يعني مثلا
أتيت بدي أكتب على ملف وماعنديش permission أشان ال
permission صلاحيات أن أكتب على drive لأن البرنامج
نفسه مافي خطأ المشكلة ما موجودة خارج حدود البرنامج
أنه لما أتيت لأجي أكتب على ملف مافي صلاحيات الكتابة
طبعا من الأخطاء أيضا أتيت بدي أعمل عملية حسابية
بدي أقسم x على y وال y طالع عنده صفر بنفع أقسم أي
رقم على صفر؟ لأ، بطلع infinity، تمام؟ هذا برضه
runtime error، يعني خطأ نتج أنه أنا شغال طلع عندي
رقم صفر، قسمت عليه، طلع عليه error أيضا
حاجة تانية مثلا، إجيت أنا قرأت string تمام؟ و جات
ال string هذه بدي أجمعها مع رقم تاني بنفع أجمع ال
string مع رقم تاني أعمل عملية حسابية بال string؟
لأ المفروض ال string بدي أعمل عملية حسابية أحولها
ل integer أو float بعدين أشتغل عليها تمام؟ ك code
بطلعليش error لكن أثناء ما يتنفذ بطلع error يعني
أنا ممكن أقوله input و أدخل نص تمام؟ وأجي أضربه
في رقم معين أو كذا ال code بطلعش error هيطلع error
أمتى؟ لما أجي أنفذ بطلها error فاحنا بنشوف الآن
طريقة لمعالجة ال exception exception handling
معناه أن كيف بقدر أعالج الأخطاء معالجة الأخطاء
معالجة
الأخطاء
هذه معناه كلمة exception handling وزي ما قلت هذا
موضوع مهم لأنه موجود في كل لغات البرمجة عشان نفهم
إيش هو ال exception handling خلينا ناخد مثال عملي
ومن خلاله نفهم كيف بيشتغل
طيب المثال اللي بدي أعطيه مثال بسيط بدنا نعمل
برنامج يدخل رقمين وبعدين يجيب لي نتيجة القسمة
بتاعتهم تمام ويطبعلي على الشاشة طيب أجهزة الرقم
الأول وليكن X مثلا بدي أقول له input interface
number وبعدين Y input intersect
أنا بحكي أرقام مفروض أن أحولهم إياها ل int يا ل float
و
بعدين بحكي له result يساوي x على y وبعدين print
result
لحظة، حتى الآن هذا برنامج بسيط، صح أو لا؟ دخل
رقمين، جيب لناتج القسمة واطبع للناتج طيب، إجيت
أعطي عمران للبرنامج دخل
لرقم الأول، مثلا الخمسة، دخل لرقم الثاني، الستة،
تمام؟ النتيجة طبعا ليها point 8333 البرنامج اشتغل
بدون أي مشاكل لكن اشتغل بدون أي مشاكل لأن ال input
اللي حطيته كان صحيح لكن أنا لو غيرت ال input مثلا
طلب من الرقم الأول دخلت
مثلا ثمانية الرقم الثاني دخلت ايه؟ بنفس؟ اه لأ
هاي طلع عليه طلع عليه طيب هذا ال error شيء سيء أن
البرنامج يطلع أي error بالأحمر زي هيك ليش سيء؟ أول
حاجة المفروض في البرنامج الصحيحة أن ال user يعرف
بالخطأ صح ولا لأ اطلع رسالة يقول حصل خطأ كذا كذا
على الأقل تمام؟ بعدين بدي أحاول قدر الإمكان لو حصل
خطأ إذا قدرت أكمل تشغيل البرنامج يظل البرنامج شغال
ليش يطفي فجأة؟ يعني احنا نفسنا لما نستخدم ال
computer ونلاقي برنامج يطفي فجأة هيك نتضايق
فايحبذا لو البرنامج دلّ إيش شذّال بعد ما يحصل الخطأ
هذا طبعا لأ لأ خلنا نشوف كيف نحل المشكلة هذه لأن
هذه أكثر من حل ممكن أحد الحلول اللي احنا أخذناها
أنه أنا لما أدخل الرقم قبل ما أجي أعمل عملية قبل
ما أحول ولا end أفحص وإذا digit ولا لأ مش أخذنا
الطريقة هذه يعني في الأول بدخله ك ... كنص وبعدين
بقوله if x is digit مش is digit بتفحص إذا النص
عبارة عن رقم أو لأ بروح بقوله x يساوي int ال x
يعني حولليها ل integer ورجع خزنليها ثاني وين في ال x
عشان ما أعملش متغيرات جديدة هذا حل من الحلول، طبعا،
ولو أنه مش حال فعال مية في المية، ليش؟ لأن افرض
أنا بدي كثور، دالبالكوا هذا الكثور مثلا رقم سبعة و
نص مثلا، هل هو digit؟ كله is digit؟ لأ، ما اعتبروش
is digit، ليش؟ لأنه في dot، ال is digit المفروض
يكون كله أرقام، يعني عادي برضه ال is digit تمشيش
في حالة لو كان عندي كثور، طبعا؟
ماشي Eval بتظبط بس احنا قلنا لا ينصح باستخدام ال
Eval تفهم؟ ماشي لو حطيت Eval صحيح إلا احنا بنشوف
طريقة تانية أشمل من طريقة ال Eval وال S digit و
غيره بحيث أن لو حصل أي خطأ يعني مثلا أنا ممكن أحتط
الخطأ هذا طب في خطأ تاني أنا محتطوش ما انتبهتش له
إيش هو؟ يعني ماشي أنا حطيت this digit وكذا مفروض في
خطأ منه آخر أنه أنا لو دخلت الرقم الأول ثمانية و
الثاني صفر هدول رقمين تمام؟ برضه هيطلع error إيش
هو؟ هي zero division error هو division by zero هذا
ال error برضه بدي أعمله احتياط كيف؟ في يساوي صفر أو
لا يساوي صفر قسم يعني برضه بقدر أحط للخطأ هذا
المهم أنه يعني ممكن يحصل عندي ثلاث أخطاء لحد الآن
خطأ في الرقم الأول خطأ في الثاني خطأ أن يكون الرقم
الثاني إيش؟ صفر تمام؟ وممكن أحط أعمل if
statements عشان أنتبه لكل خطأ من هدول الطريقة
الثانية الأشمل بقول التالي الآن أنا ال code هذا
خايف يحصل فيه أخطاء متعددة طبعا بقول ال code اللي
أنت خايف يحصل فيه أخطاء حط قبله كلمة try طبعا زي
ذلك try نقطتين وبعدين هدول أعملوا indentation
عشان وكأنهم يكونوا جوا ال try طبعا وبعد ال code
تبعك بتحط كلمة except
ماذا يعني هذا؟ هذا ما نسميه try except block بيقول
لي إذا أنت عندك code معين مثلا
مجموعة أسطر هذا البرنامج تبعي أنت شايك أن الأسطر
الثلاثة دول فيهم ممكن يطلعوا مشاكل كتيرة وطبعا لو
حصلت مشكلة يعني البرنامج إيش هيصير فيه؟ طبعا لو
حصلت أي مشكلة هنا إيش هيصير في البرنامج؟ كله هيطفي
صح أو لا؟ فأنت هدول خائف منهم الثلاث أسطر بدك
تتأكد أنه إيش ما حصل خطأ البرنامج بقى له مش هيطفي
تمام؟ بتيجي للثلاث أسطر هدولة بتحط هنا كلمة try و
بعدين أخيتهم بتحط كلمة except والأسطر كلهم بتحطهم
جوا مين؟ جوا الـ try block بين الـ try و بين الـ
except تمام؟ إيش اللي هيصير الآن؟ الآن هيبدأ ينفذ
البرنامج إذا نفذ بدون أخطاء هيشغل البرنامج عادي الـ
try والـ except ما له مش قيمة يعني إذا دخلت
الأرقام صحيحة وما قسمش على صفر بيشتغل وبيكمل وين؟
وبيكمل تحت انتبهوا معايا لأن مسار التنفيذ مهم هذا
لو ما كانش فيه إيش ما كانش فيه أخطاء هيشغّل هذا عادي
وهيشغّل هذا عادي يعني كأن الـ try والـ except ما
لهم.. ما لهم مش موجودة.. ما لهم مش فايدة إيه
تقولهم فايدة لو حصل error؟ إيش اللي هيصير لو حصل
error؟ هذا بدنا نفهمها كويسة نكبرها شوية هاي الـ
try وهي عند مجموعة أسطر هاي السطر الأول الثاني
الثالث الرابع وهي عند إيش كلمة except تمام؟ وهي إيش
الـ except أنا فاضي لحد الآن وهي إيش خمسة وستة و
سبعة وثمانية البرنامج تبعه ثمان سطور أربع منهم
محطوطين جوا مين؟ الـ try except لاحظ هدول عملتهم
indentation هدول برا الـ try except تمام؟
زي ما حكيت، إذا هدول اشتغلوا، بيكمل وين؟ تحت ورا
كلمة من الـ try except موجودين، لكن لو حصل خطأ
في أي سطر هنا، عند أي سطر، إيش بيصير؟ هيوقف عند
السطر اللي حصل فيه خطأ، تمام؟ مش هيوقف يطلع من
البرنامج، لأ، يعني مثلا، حصل خطأ هنا، نفذ هدول،
إيش هيجي هنا؟ حصل عنده خطأ، هيروح وين؟ هيروح على
الـ except الـ except عادة، احنا بنحط فيها الـ code
اللي يبلغني إيش الخطأ اللي حصل تمام؟ يعني الـ code
اللي في الـ except هذا دلبلكوا الـ code اللي في الـ
except مش من ضمن البرنامج عفوا مش من ضمن الـ code
الأساسي للبرنامج هذا الـ code اللي في الـ except
code خاص هيتنفذ فقط لو حصل خطأ واضحة يا جماعة؟
هيتنفذ فقط لو حصل خطأ يعني كإني أنا الـ code هذا
اللي فيه مشكلة أنا أحطه بصورة تمام؟ ليه الصورة؟
عشان ما يأثرش هالحاجات التانية لأ لو حصل أي خطأ من
هدول تمام؟ هيروح ينفذ الـ code الموجود في الـ
except يعني هيوقف عند السطر اللي حصل فيه خطأ تمام؟
وهيروح على الـ except عادة في الـ except نخلي يطبع
إيش الخطأ اللي طلع عندي تمام؟ بعد ما يقول لي أن في
خطأ طلع عندي بروح بكمل تنفيذ البرنامج عادي أنتم
معاه ولا لا يا جماعة؟ آه مرة ثانية إذا ما فيش مشاكل
بيشتغل عادي بنفذ الـ try وبروح بكمل باقية البرنامج
code الـ except بتنفذش لو ما فيش مشاكل طبعا لكن لو
حصل خطأ عند أي سطر من السطور بوقف عند السطر اللي
حصل عنده خطأ وبروح بنفذ الـ code إيش اللي في الـ
except وبعدين بيكمل تنفيذ البرنامج الـ except أنا
استفدت منه أكثر من حاجة أول حاجة أنا ضمنت أن
البرنامج يستمر في الشغل تمام؟ مش أنه لو حصل خطأ
خلاص يطلع يطلق لي الشاشة الحمراء هذه الحاجة الثانية
ضمنتها أن أعالج الخطأ بطريقة صحيحة أن أطلع المستخدم
رسالة يفهمها تمام؟ طيب هذا الكلام اللي حكيته
النظري خلينا نطبقه على المثال تبعنا هذا أنا مثلا
عندي
في المثال اللي بينا الـ code هذا أنا متوقع يحصل فيه
خطأ فأقول لك لو حصل خطأ أي حاجة بدي أروح لف الـ except
وأطبع رسالة مكتوب فيها error تمام
لأن بعد الـ try والـ except ممكن يكون في أسطر ثاني
يعني مثلا ممكن هنا يكون في print hello تمام list
واحد
اثنين ثلاثة وبعدين for I in list print I هذا
الـ code المفروض
أنه يأتي بعد الـ code هذا ماشي طيب شوفوا الآن لو حصل
خطأ عندي، لو البرنامج طبعا ببدأ التنفيذ من
البداية، هيجي ينفذ هنا، لو حصل خطأ عند أي جملة،
هيوقف التنفيذ عند السطر اللي حصل فيه مشكلة، و
هيروح يطبع الـ إيش؟ يطبع الـ error وهيكمل التنفيذ
من الجزء اللي تحته لو ما حصلش خطأ، إيش بيسوي؟ بنفذ
هدول وبعدين بنفذ مين؟ اللي تحت، لاحظ أن هدول برا
الـ except صح؟ هذا مش جوا الـ except تعال نشوف
كيف هيتنفذ البرنامج طيب،
هيرندخل الرقم الأول مثلا خمسة الرقم الثاني ستة
الآن طبعا ما فيش مشكلة صح ولا دخلت أرقام صحيحة و
قسمهم وهيطلع ناتج القسمة وبعدين إيش هذا الـ code
اللي تحت الـ code اللي برا الـ try except الآن
تعال نشوف إيش بيصير لو صار عندي مشكلة دخلت الرقم
الأول أربعة الرقم الثاني حطيته a a مثلا هذا خطأ
صح؟ تعال نشوف إيش بيصير أكبر
الشاشة بس هاي الناتج لأن دخلت طبع الـ error وبعدين
طبع الـ hello واحد اثنين ثلاثة تكمل التنفيذ على الأقل
هيك البرنامج ما وقفش ولا طلع الشاشة الحمراء دي صح
ولا ضمنت أن البرنامج يستمر في العمل حتى لو حصل خطأ
وبعدين هذا الـ try except ريحتني كمان أن مش كل
خطأ بدي أعالجه على حدّه وأحط له F في الـ statement
صح ولا؟ لأن في أخطاء ممكن أنا ما أتوقعهاش يعني مثلا
الكتاب على ملف كتير أخطاء ممكن تحصل، ممكن الملف
ما يكونش موجود، ممكن المجلد ما يكونش موجود، ممكن
الملف يكون موجود لكن ما ليش permission أني أكتب
عليه، صح ولا؟ فبدل ما أنا أقف في الـ statement عشان
أفحص كل حالة، خلاص الـ code اللي أنا شايفه ملغم وفي
مشاكل كتير، بحطه بين try and except، بحيث أنه لو
حصل أي خطأ فيه، يوقف عند السطر اللي فيه خطأ وينفذ
للـ code الموجود في الـ except إيش بنحط في الـ except
عادة كيف نعالج الخطأ يعني إيش يعني كيف نعرف
للمستخدم فيه خطأ نطبع له مثلا رسالة تمام أو غيره
واضحة النقطة هذه يا جماعة طيب شوفوا نجرب نفس الـ
code هنا نفسه تعال مرة دخلنا
مثلا أربعة ودخلنا رقم 2 صفر
إيش طبع له؟ طبع الـ error لاحظ أنه هل نفذ الـ print
result؟ هل اتنفذت print result؟ لأ ليش؟ لأن الـ
error one حصل حصل في السطر هذا الثالث الأول
والثاني هدول ماشيين لأنه هدول خدوا أرقام صح الثالث حصل
فيه خطأ لما أجى عمل عملية القسمة فوقف هنا معناه أن
هذا السطر ما له؟ مش هيتنفذ وهيروح ينفذ مدام حصل خطأ
بنفذ الـ code اللي في الـ except وبعدين بيكمل بعده
لحد آخر البرنامج وهذا اللي صار عندهم واضح
يا جماعة طيب
نقطة
ثانية
في مشكلة صغيرة أنه لو حصل أي خطأ بتبع لي error صح
ولا؟ طيب الـ error هذه مفيدة للمستخدم؟ يعني عارف إيش
الخطأ اللي هيحصل عنده؟ هل هو الرقم الأول خطأ ولا
رقم الثاني خطأ ولا قسمة على صفر ولا كتابة على ملف؟
ما أعرفش إيش الخطأ، ماشي صح أنا ضمنت إن البرنامج يظل
شغال صح، تمام؟ لكن في النهاية الرسالة دي مش
informative، ما بينت لي فعليًا إيش نوع الخطأ اللي
صار عندي طب كيف ممكن نعمل تخصيص للرسالة؟ انتبهوا
معايا، لأن ما بيقوله هو إذا حطت except بشكل عادي،
except لوجه الطين، معناه إنه لو حصل أي خطأ في الـ
code الموجود بين try و except، بتنفذ فقط الـ code
اللي موجود في الـ except هذه، يعني هذا الـ except
نقطتين، هذه except عامة، بمعنى إنها بتنفذ لو حصل
أي خطأ، ولأني أنا عامة، مش هقدر أحدد إيش نوع الخطأ
اللي طلع عندي، تمام؟ يمكن نعمل تخصيص، أنه أقوله
لو حصل الخطأ لفلاني،مفذني كذا أو طلقلي رسالة زي
هي لو حصل خطأ ثاني طلقلي رسالة زي هي لو حصل خطأ
ثالث طلقلي رسالة زي هي يعني مثلاً بدي أقوله لو أنا
دخل بدل رقم دخلت الـ string يطلقلي يقولي مثلاً
invalid number تمام؟ أو you cannot input string
أنا بدي أحدد الرسالة اللي بديها إذا دخلي مثلاً رقم
صفر بالرقم الثاني يقوللي مثلاً cannot divide by
zero يعني صار في تخصيص للخطأ أكثر كيف ممكن نعمل هذه
طيب لأ مش بالـ F نفس الحكاية try except طلع معايا
هنا عشان نفهم هذه برجع الـ code زي ما كان في الأول
ايش يعني زي ما كان في الأول يعني بدون .. بدون try
except عشان نتعرف ايش أنواع الأخطاء الموجودة و
نتعرف مرة مرة هذا الـ code الأساسي تمام؟
أجيب دخلت أنا مثلاً ايه؟ ايه هذا غلط صح؟ هاي طالع
ليه error تحت هنا الرسالة هذه اللي بتطلع احنا
ما بنطنشها دائماً كتبلي
حد اسمه value error هذا نوع الخطأ اللي طلع عندي في
خطأ اسمه value error وهذا رسالة مقترنة بالخطأ يعني
برضه بطبع لرسالة بقولي ايش الخطأ اللي حصل عندي،
تمام؟ يعني هو نفسه لو أنا مش حاضر try except
بيحددلي نوع الخطأ تعالوا نعمل كمان مرة راني دخلت
ستة ودخلت صفر، تمام؟ طلعلي خطأ، كتبلي تحت هنا ايش؟
zero division error division by zero صح؟ مش هذا خطأ
كمان قسم على صفر كتب ليه هو الخطأ و طلقلي رسالة
مقترنة فيه
list
هذا الـ code صح ولا لأ؟ من يقول ليه؟ السطرين اللي
أنا كتبتهم، طلبوا فيهم، قولوا ليهم صح ولا خطأ؟ لسه
ثلاثة، ما فيش صح ولا لأ تعالوا هنا مرة طبعاً يعني
واحد هيقوللي ايش علاقة هذا باللي جابله، ما لهو مش
علاقة، احنا بس بنعطي .. بنبين أخطاء، تمام؟
تعالوا نعمل run هنا بتدخل أرقام صحيحة في الأول تمام
وبعدين طلعلي خطأ برضه كتبلي حاجة اسمها index
error تمام list index out of range يعني هو نفسه
بطلعلي أنواع الأخطاء طب ايش هستفيد؟ ماشي هستفيد
الثاني أنه أنا اكتشفت الآن آه و أنا عارف أن الـ
code هذا ملغم يعني في مشاكل كثير صح ممكن تحصل
بعدين بحط هنا try وهذول كلهم ايش بعمل فيهم؟ تمام؟
وبعدين بكتب except تمام؟ شوف ايش بدي أفوه هنا،
قبل شوية كنت بحط except نقطة، نقطتين، معناه لو حصل
أي خطأ نفذ الـ code في الـ except، اللي قال لأ، بدي
أقول except وأحط كلمة value error شوف
ايش بدي أكتب أنا هالـ gate
الـ code اللي عندي هنا الآن
أنا صرت أعرف أن الـ code تبعي هذا ممكن يطلع أكثر من
نوع من الأخطاء طبعاً فحطيت الـ code تبعي داخل try
وحطيت طبعاً الـ try لازم تيجي معايا على الأقل except
واحدة الآن أنا في المثال اللي عندي فيه عندي ثلاثة
except يعني هذول .. خلينا نقول زي تلت بصيد بصيدة
كل واحدة بتصيد ايش؟ بتصيد حاجة معينة إذا هذا الـ
code اللي جوا اللي try except إذا طلقنا الـ error
من نوع value error مين بيلقطه؟ الـ except الأولى
ليش؟ لأن الـ except الأولى متخصصة في مين؟ value
error لو حصل خطأ نتيجة قسم على صفر مين متخصص فيها؟
الـ Accept الثانية لو حصل خطأ نتيجة Index Error أنا
بوصل لمكان غير موجود في القرق هتاخدوا الثالثة هذه
طبعاً يبقى أنا ممكن أحط للـ trial واحدة أكثر من
Accept بحيث أن كل Accept متخصصة في Error Error
معين بتعالجه بطريقة مختلفة ايش أنا بتعالجه بطريقة
مختلفة؟ كل واحدة بتطبع رسالة مختلفة عن الثانية
واضحة يا جماعة؟ خلينا نجرب نشوف ايش اللي حيصير لو
حصل عندي أي نوع من الأخطاء الآن
الـ first number دخلت الأول ستة والثاني صفر تمام؟
تعالوا نشوف ايش صار عندي في التنفيذ دخلت ستة صفر طب
على ايش؟ Cannot divide by zero ليش؟ لأن هو وقف عند
مين؟ عند السطر هذا، لم ينفذ كل اللي بعده، صح؟
انتبهوا معايا يا جماعة الخطأ حصل وين؟ هنا هل هذا
اتنفذ الـ print result والـ list وهذا؟ لأ، وقف
عنهم راح وين؟ راح الـ accepted الثانية هذا طبعاً لا
يمكنك أن تقوم بالقراءة وبعدين واين راح؟ كم ملعق
بعده، تمام؟ نوع ثاني
دخلت ستة ايه هاي
طبعاً الـ invalid input وكمل الـ code اللي بعده
لو دخلت الأرقام صح ستة واثنين برضه طلعني error
ليه؟ ايش هو؟ index error يعني شوفوا هنا ايش اللي
صار دخلت أنا ستة واثنين قسمهم مع بعض طبع للنتيجة
اللي هي ايش ها هي، ثلاثة، صح؟ يعني هذا كله اتنفذ
وعمل الـ list ولما يجي ينفذ هذا السطر صار عنده
مشكلة وقف هنا عند السطر هذا وراح ايش الـ exception
اللي طالع عندي نتيجة الـ list 3 هذه اللي هو الـ
index error تمام؟ راح شاف الـ exception المناسب
لمعالجة الخطأ هذا اللي هي الـ exception الأخيرة طبع
الـ index error وكمل في الـ code اللي تحت واضح
يا جماعة؟ طيب ممكن كمان
آه
لأ بيطلعوا معايا يا جماعة البرنامج صار interface
number و second number قسمهم مع بعض طبعاً للنتيجة و
راح فتح ملف
هيك صح ولا لأ؟ طبعاً اعمل هي فتح للملف كتابة كتب
النتيجة واعمل ايش الـ close طبعاً الآن
هذا الـ code لو مش فيه مشكلة يعني
أنا دخلت الأرقام صح ستة واثنين طبعاً طيب ايش
المشكلة آه الـ write ليش طلعلي خطأ الـ write بتاخد
الـ string فبس بدي أحول هذه لـ string دي
هذه ستة اثنين تمام طيب طبعاً ليه ايش هذه النتيجة
المفروض أنه كتب على الملف تمام نتأكد تمام
هاي النتيجة صارت في الملف و
بعدين كمل التنفيذ في الحالة هادرت رايك except
مالها مالهاش فايدة طيب لو أنا قلت هنا ايش عملت؟
غيرت مسار الملف المجلد هذا بطل موجود يبقى الآن لما
يجي يكتب برضه حيصير خطأ صح؟ دخل
الرقم الأول ثمانية الرقم الثاني اثنين آه الآن برضه
طلعلي خطأ ايش هو ايش كتب ليه؟ file not found error
مدام هذا error طلع عندي ممكن برضه اعمله ايش؟ accept
أقوله accept file not found error اطبعلي print
مثلاً file not
found يعني أي خطأ ممكن يحصل هنا ممكن احتاط عنده
واين اعمله accept خاصة فيه طبعاً طيب الآن ممكن ايش
نعمل كمان حاجة أخيرة عادي أنه نيجي بعد الاكسبتات
كلهم دول نحط except أخيرة بدون تحديد نوع الـ
exception تمام؟
بالضبط الآن الـ code اللي أنا ممكن يطلع عندي أخطاء
ممكن أن أنا ماكنش مستحضر كل الأخطاء اللي ممكن تطلع
فاللي أنا عارفه أو متوقعه أو اللي يهمني بعمله
except except except لأن في الآخر بحط except عامة
هذه except عامة بحيث لو .. لو في أي خطأ ما تمش
معالجته في الحاجات اللي فوق آه يطلعني أقرأ تحت
يعني يطلق .. يتعالج الـ except الأخيرة واضحة دي
عامة بحيث أنه .. افرض حصل خطأ غير هذول اللي أنا
كتبتهم هنا هيوقف البرنامج فأنا عشان احطاط وأضمن أن
البرنامج ما يوقفش بأي حال من الأحوال بحط except
أخيرة عامة هذه لحيث أن لو ما تمشي موالش الأخطاء
اللي طلعت عندي فوق الـ except الأخيرة بتحلل المشكلة
تعالجها صح الرسالة مش مفهومة بس أحسن ايش؟ أحسن
ما يوقف البرنامج واضحة يا جماعة؟
نقطة تانية الآن الرسالة اللي أنا بطبعها مين كتب
الرسالة؟ مين حددها؟ أنا صح ولا؟ طيب أنا حابب أجي
أنه أشوفها لما كان يطلع عندي error هو كان يطلعني
رسالة من عنده صح ولا؟ فهل أنا بقدر مثلا أطبع
الرسالة اللي هو كان يكتبها؟ ممكن، كيف؟ تعالوا
معايا هنا طلع عندي ValueError بكتب جنب الـ
ValueError As وقيمة أي Variable XYZ يعني كأنه هنا
الـ ValueError أخذ القيمة في الـ X في الـ X بعدين
بعدين جنب الـ Invalid Input مثلا بحط نجمتين زائد و
بعمل Str(X)
يعني كأنه هنا .. إيش عاملة يا جماعة؟ لو طلع عندي
ValueError as x بياخد هذا و بيخزنه في الـ x بعدين
قلت له اطبع لي الـ x ونفس الحاجة لو طلع عندي
ZeroDivisionError عشان ناخد الرسالة اللي بتطلع
مع ال error بنحط برضه as واسم أي متغير x, y, z
اللي بدك إياه تمام؟ وهنا برضه عشان نطبع الرسالة
ممكن نعمل زائد ونقول له str(x)
عند Index Error طالع برضه بخزن ال error بيطلع في
متغير y بيكل y وبعدين هنا بطبع str(y) ال error
الأخير إيش نعمل فيه يعني مثلا طالع عندي error أنا مش
عارف إيش هو تمام بنعمل except وبنحط Exception زي
هيك وبنقوله as x طبعا إيش هذا ال Exception اللي
أنا كتبته هنا ال Exception هذا خلينا نقول أبو ال
.. كل أنواع ال Exceptions يعني هذا Exception عام
جدا أي .. أي خطأ حصل ما تمش معارشته فوق هينفذ ال
except هذه وهيطلع عندي Exception هيخزنه في ال X
ليش عملت هيك؟ الطريقة هذه على أساس أجي أقوله print error
مقطتين وأطبع لي str(X)
كيف .. اه هذه الميزة كمان أنها بتطلع لي .. يعني
بتطلع لي رسالة الخطأ بالفعل بس مش شرط أنها بتسد
يعني أفضل أنا بضيع رسالة من عندي تمام؟ بدأ طار
أعمل except خاصة خلينا نجرب هذه الشغلة اللي عملناها
في الآخر enter
first number ستة وبعدين صفر تمام؟ مثلاً، عندما
أقسم على صفر، كتب لي كتابة Divide By Zero، وهذا
رسالتي، وجانبه كتب لي Division By Zero
هي AA تمام invalid input وفصل لي بقول invalid
literal for int with base تمانية AA يعني هذه
الرسالة نفسها اللي كانت تطلع لي بالشاشة الأحمر صارت
تطلع لي بس أنا أصبحت متحكم فيها، هاي الفرق عشان
البرنامج ما يوقفش بالخاش يتبعها دور الدور وتطبع
المتغير؟ لأ للأسف بقول لازم تحط ال Exception في
المتغير وتطبع المتغير
تمام يا جماعة؟ طيب، بعد ما أخذنا هيك، نروح شوية على
الكتاب، نحل بعض التمارين البسيطة جدا، اللي هي علاقة
في ال Exceptions طيب،
ماشي، قبل التمرين، نقطة أخيرة، مش هشرحها على
الجهاز، بدي أشرحها على اللوحة
نفترض أن أنا عندي برنامج مكون من عشر سطور أو
مثلا، واحد، اثنين، ثلاثة، أربعة، خمسة، ستة، سبعة،
ثمان سطور، تمام؟ وعندي سطرين ممكن يحصل فيهم مشاكل،
تمام؟ ValueError، Division By Zero، Index Error،
يعني ممكن تحصل مشاكل هنا هلا، عشان أنا أحتاط
للمشاكل هذه، قولنا ممكن أحط try except طبعا يعني أي
code أنا خايف منه بس حط قبله كلمة try طبعا وفي
الآخر حط إيش except طبعا وهنا بتعالج الخطأ
بالطريقة اللي بدك إياها الآن السؤال اللي أنا عندي أنا
إيش قلت؟ السطرين اللي ممكن يحصل فيهم مشكلة هدول
طب أنا الآن عندي خيارين هل أحط بس السطرين هدول ما
بين try and except ولا أحط ال code كله بين try and
except يعني الآن في الحالة هذه الخيار الأول أن أحط
ال code كله بين try and except الخيار الثاني أن بس
السطر الأولاني هذا نخليه زي ما هو مش هذا السطر
الأول مافيه مشكلة بعدين أجيب الاثنين الثانيين أحطهم
هنا try وأحط هنا except هدول
مين؟ هذا السطر الثاني والثالث هيهم حطيتهم جوا try
and except اللي أنا خايف منهم الباقي أنا مش خايف
منهم بحطهم برا ال try and except اللي هم أربعة
وخمسة وستة وسبعة وثمانية عندنا سيناريو يعني
مفهومة مش اللي أنا كتبته اه طب إيش رأيكم مين أفضل
الحل الأول ولا الثاني هذا الأول وهذا الثاني اه
أنا ممكن أنا ممكن مش الثاني لأن ممكن ما ينفذش الباقي
طيب، كلامك صح وكلامك صح، تمام؟ الحل هو أنه ما أقدرش
أحدد مين الحل الأفضل إلا بناء على ال code اللي
عندي، كيف؟ الآن فرضا أن السطرين هدول مرتبطين عليهم
الباقي، تمام؟ يعني مثلا هدول بدأوا يعملوا عملية
حسابية وهذا السطر أسلط البعد وبدأت تأخذ النتيجة
وتكتبها على ملف المفروض عملية الكتابة على الملف ما
تتم إلا لو هدول اتنفذوا بشكل صحيح يعني زي المثال
هذا المفروض أنه أنا ما أروحش أكتب النتيجة على الملف
مش هدا بكتب ال write لل result إلا لو تمت عملية ال
division صح ولا يا جماعة؟ ففعلياً ال code اللي تحت
معتمد على ال code اللي فوق في الحالة هذه إذا أنا
جزء من ال code المفروض أنه لا يتنفذ إلا لو نفذ ال
code اللي قبله وال code اللي قبله ممكن يحصل فيه
أخطاء أحط كلهم بين try و catch يا نعيش سوا يا نموت
سوا صح ولا؟ زيك يا كلهم بتنفذوا يا كلهم ما يتنفذوش
هذه الفكرة واضحة يا جماعة؟ فاللي بيحددوا إيش طبيعة
ال code ممكن ممكن الأسطر اللي بعدها ما تكونش اللي
هي علاقة بهذه زي مين؟ زي المثال تبعنا ال code اللي
تحت هذا ال code اللي تحت ما له علاقة باللي فوق
حاجة تانية أعمل list جديدة وأطبع لها هذا ليش
هأحطه جوا ال try except بحيث إن لو حصل خطأ هنا
ما ينفذش هي مدام مش مرتب أو مش معتمد عليه قبله خلاص
أحطه لحاله برا برا try except واضحة الفكرة يا جماعة
فلازم أنا لما أكتب try except أفكر إيش أحط جواه أو
إيش أحط برا الآن
تعال نشوف أحد أسئلة بسيطة بقول هنا في السؤال
شايفين هذا
خلينا نقول blueprint لل code يعني مخطط لل code
تمام؟ بقول إيه؟ suppose that statement two .. إيش
بتكتبوا؟ هاي موجود على اللوح قدامك صفحة
في ال PDF 463 طيب suppose that statement two
causes an exception يعني بتسبب إيش؟ هاي under
statement two يعني السطر الثاني ما هو اللي بيعمل لي
خطأ in the following try except طلعوا
شكل ال code في عندي try جوا statement one
statement two three وبعدين في عندي except
Exception one و except Exception two عادي عندي
أكثر من except وبعدهم كلهم في عندي إيش هنا
statement four برا ال try except answer the
following questions Will statement 3 be executed؟
هو يقول إن هناك خطأ سيحدث عند الـ statement هل ال
statement 3 سيتنفذ؟ لأ طبعا إحنا بيقول إن هناك خطأ
سيحدث هنا بيكمل في اللي بعده if
the statement is not caught ماذا يعني caught؟ ماضي
catch ما نمسكش إيش يعني ما نمسكش؟ يعني معناها إن
هدول ال except هدول الـ except اللي هنا ما بيعالجواش
الخطأ اللي بيطلع من هنا، يعني مثلا ممكن يكون هذا
Division By Zero و هدول ValueError و Index Error،
معناه أنه أنا ما عملتش except لمعالجة الخطأ هذا هذا
معنى كلمة Exception is not caught ما تعالجش will
statement four be executed إيش رأيكم؟ لأ إذا حصل
خطأ ما تمش معالجته البرنامج هيوقّف عنده كله هيوقّف
معناه statement أربعة مش هيتنفذ طيب
if the exception is caught in the except block will
statement 4 be executed? يعني إذا .. إذا صار له
catch في ال .. في ال exception هدوء هل يتنفذ
statement 4؟ أكيد حكينا الكلام هذا إن عمل catch
في أي واحدة من هدولة بتنفذ statement 4 أصلا كل
فائدة try catch إنها تضمن البرنامج يظل شغال نشوف
السؤال البعد what is displayed when the following
program is run?
واضح يا جماعة العلو؟ ايوة واضح تمام؟ try عند list
هنا يساوى عشرة ضرب صفر هذا ايش معناه؟ مين يقولي؟
خدناها صفر بنكررها عشر مرات تمام؟ و بعدين روحنا
list عشرة أخدناها و حطيناها هنا fixed و طبعا done
تمام؟ مين يقولي ايش الناتج لل code هذا؟ يعني ايش
الناتج؟
الناتج ايش الناتج بالظبط index out of bound ما هو
لو حصل خطأ يا جماعة هيروح وين على ال exception صح
ولا هيطبعلي الرسالة هذه انا بدي ا output يعني ايش
برنامج ايش بطلع نتيجة تمام هو طبعا هيطلع يا اما
done يا اما index out of bound done امت هتطلع لمّا
يكون صح هو هنا غلط ليش لأنه العشرة out of range مش
هم القرية حجم عشرة الصفر كررناه عشر مرات يعني ال
index تبع القرية من صفر لتسع طبعا طيب
تعالى نشوف السؤال اللى بعده أصعب شوية الان
اتطلبه فى ال code هذا عندى diff main ايش يعنى هدى
function dual function اما اللى try طبعا و بعدين
نفذ f جثين ايش هدى؟ function call طبعا مولها ال f
هيها تحت ايش بتعمل ال f؟ واحد على print واحد على
zero يعني البرنامج تبعى كام function فيه موجودة؟
هى واحدة و هى تنتين واحدة بس تدريها من التانية
طبعا تنفيذ البرنامج من وين ببدأ؟ من هنا هىهي تنفيذ
البرنامج، صح؟ يعني أول ما يشغل البرنامج، بنفذ هذا
هيروح وين؟ هيروح يشغّل ال main ال main إيش هتشغّل؟
ال F ال F إيش هتعمل؟ واحد على زيرو إيش ال output
بتاع البرنامج؟ مين يقول ليه؟ divided by zero الآن
إيجي ينفذ ال main، حصل خطأ هنا هل هينفذ البعدها؟
لأ، هيروح على طول على ال zero ال division error
هينفذ ال divided by
طبعا إذا إذا إذا إذا إذا إذا إذا إذا إذا إذا
إذا إذا إذا إذا إذا إذا خلاص مافيش ده ينفذ اللي تحت
انت اللي تحت بتتنفذ لو ال exception مانمسكش هنا
هذه بتتنفذ واضحة؟ مش انه هذه و هذه بتتنفذه لأ الصح
ان واحد exception واحدة except واحدة بتتنفذ اتنفذت
خلاص الباقين مالهمش مالهمش لازم واضح النقطة هذه يا
جماعة يبقى ال output هنا divided by zero
طيب، شوف السؤال هذا السؤال
هذا مجسم جسمين، يعني جاي على الصفحتين الان هدفي
عندى هنا function صح دائما يا جماعة لما ناجى
السؤال في functions بتطلع مش على ال functions في
الأول بتطلع على السدعة على بداية البرنامج تمام
فأكيد طبعا بداية البرنامج هتكون تحت تمام فبنزل تحت
على طول بناجى هاي البداية هاي ال main طبعا بروح
بامي بروح على مدام استدقت main بروح بتطلع على ال
main ايش فيها ال main بدأ في الأول ايش ا try بعدين
نفذ ال F بدنا نروح ال gate وين على ال F روحنا على
ال F ال F جواها عامل ايش ا try طبعا هنا معرف متغير
حط فيه ABC و بعدين اعمل print
S3 طبعا هذا ايش هذا خطأ مادام جوا ال F في try يبقى
لازم يكون accept في الصفحه اللي بعدها طبعا تعالى
نشوف ال accept اللي بعدها ايش مكتوب هنا Zero Zero
division Zero division error هو ال error مش Zero
division لأ لسه انتبهوا معاياهذا سؤال بلخبط شوية
الان ال error اللي طلع عندي المفروض انه index
error صح؟ موجود في try except لكن ال except
الموجودة بتعالج خطأ تاني مالوش علاقة طب ايش اللي
هيسير؟ تمام؟ لسه الخطأ موجود هل هيوقف البرنامج؟
انتبهوا معايا اصلا ال F نفسها موجودة داخل ايش؟
داخل ال try الان ال F هذه صار فيها مشكلة هي ال F
نفسها ماقدرتش تحله الان ال try و ال accept اللي جوا
ال if لخطأ تاني يبقى الخطأ موجود يبقى مين هياخد
الخطأ اللي هان ال accept هادي طبعا يعني الخطأ
بيبقى موجود و بترحل طبعا ال accept الصغير اللي جوا
ماحلتش المشكلة ال accept اللي برا هتحلها طبعا
يعني هنا كإنه ال F أصلا جواها try except ال except
اللي جوا ال F محلتش مين هياخد الخطأ هيحله ال
except اللي برا برا في except فيها index error
هتطبعلي index out of bound
يعني إيش الناتج لبرنامج هذا؟ هيتبع الرسالة in this
out of town هيتعالج الخطأ؟ نعم هيتعالج، بس مش جوا
ال F هيتعالج بال exception، بال trial جوا ال main
بقى لإن في عندي انا two trials صح؟ ال trial جوا ال
main و ال trial جوا ال F ال trial جوا ال F فشلت في
معالجة الخطأ لوين اترحى الخطأ؟ لأن ال trial جوا ال
main هي العلجته واضحة يا جماعة هذه؟ هو يعني متعمد
يعمل هيك عشان إيش الواحد يتلخبط طيب
هذا السؤال فيه نقطة أنا ماشرحتهاش فخليني إيش أروح
أجربها تاني
طيب، ماشي، الظبط هي معايا، خلّيني أفرجيكوا بس
النقطة الأخيرة لل exception handling لأن هذه
موجودة في السؤال و أنا ماشرحتهاش
الان ارجعت لل code المثال اللى انا اعطيته اللى هو
ايش كان يعمل يا جماعة ياخد رقمين ويعمل قسمة ويكتب
النتج على الملف وانا عامل كام except عندي عندي
عامل خمس except واحدة لمعالجة value error واحدة
zero division error واحدة index error واحدة file
not found وفي الآخر exception عام طبعا؟ الان عشان
افرجيكوا الحالة اللى انا بدى اشرحها شلت ال
exception العام وشلت مين ال zero division error
معناه ان ال trial اللى عندى كان مشكلة بتحل بتعالج
فقط تلت أنواع من الأخطاء value error و index error
و file not found error لو حصل اي خطأ من الأخطاء
دولة البرنامج هيشغل صح ولا لأ لأنه هيعالج الخطأ و
يكمل التنفيذ طب لو حصل اي خطأ مش موجود من ضمن
القائمة هذه البرنامج هيوقف
Interface number 6 2 طبعا هنا مافيش مشكلة عندي
هيطلع النتج 3 كتبه ع ملف وكمل التنفيذ لكن لو أنا
حكيت 6 قسملي ع صفر طبعا طلعلي error لأن هذا الخطأ
أنا ماعلشتوش فعلا طيب شوفوا أنا بدي أضيف حاجة
جديدة و هاد الحاجة optional ايش يعني optional؟
اختيارية ممكن اعملها ممكن لأ بقول لي مع ال try
except ممكن تحط حاجة اسمها finally نقطين ايش يعني
كلمة finally؟ طبعا هاد الحاجة اللي بشرحها optional
و مش مستخدمة كتير بس ايش للعلم عشان نقدر نحل
السؤال طبعا final يعني أخيرا نهاية طبعا بدي أحط
فيها رسالة
طيب، إيش هي الـ finally هذه؟ بيقوللي هذه الـ
finally أي code أنت تحطه فيها، هيتنفذ بكل الأحوال،
سواء الخطأ تم معالجته أو لم يتم معالجته، تمام؟ إيش
يعني الكلام هذا؟ يعني لو البرنامج اشتغل صح، هينفذ
finally، لو ماشتغلش صح، برضه هينفذ finally ايش بدنا
فيها؟ أحيانا في بعض الحالات بكون عندي code بدي
لازم يتنفذ في أي حال من الأحوال يعني مثلا أنا عامل
login على server تمام؟ وقعد مثلا ببعت بيانات وحصل
خطأ في أرسال البيانات البرنامج الآن الخطأ هذا
ماقدرش يعالجه تمام؟ المفروض سواء عالج الخطأ أو
ماعلش الخطأ أنه بعد ما أنا أرسل البيانات أنه يسكر
يعمل logout يعني الـ logout لازم تحصل سواء البيانات
انبعتت صح أو حصل خطأ هذا الـ code لازم يتنفذ في كل حال
من الأحوال فبحط وين أنا؟ بحط في الـ finally بحيث
أنه اشتغل الـ code اللي في الـ try بروح بنفذ ال
finally ما اشتغلش الـ code اللي في الـ try بروح برضه
بنفذ الـ finally الـ Final ماهي فرقة على الـ code
اللي برا هذا؟ هذا اللي برا مش هيتنفذ لو حصل خطأ
لكن هذا لو حصل خطأ الـ final ماله هيتنفذ طبعًا فهي
هذا الـ final تلزم في حالات محدودة لما أنا عندي
code بدّه يتنفذ يعني خاوة يعني في كل حالة أي حالة
من الأحوال سواء حصل error ولا ما حصلش بدّك تنفذ ال
code هذا يعني مثلًا نجرب الكلام اللي أنا بحكيه هاي
هلو بدنا نشوف this is the final block لأن هذا
الـ this is the final block المفروض تنطبع الرسالة
في كل حال من الأحوال صح؟ فبدأ أجرب أشغل البرنامج و
أعمل خطأ و مرة أشغله بدون خطأ أنا أدخل أرقام صحيحة
6 و 3 طبعًا للنتيجة و كتبها على ملف و طبعًا لـ this
is the final block و طبعًا لـ hello وكمل تحت هذا لو
اشتغل بدون أخطاء لكن لو أتيت أنا و حطيت 6 و 0 تمام؟
شوفوا إيش اللي حيصير حطيت 6 و صفة الـ division by 0
صح ولا؟ طبعًا الـ error لأن أنا ما عملت لوش exception
handling تمام؟ و بعدين كتب لي this is the final
block يعني قد نفذت مع إنه صار في خطأ تمام؟ طبعًا
الـ code اللي بعد الـ final إيه؟ ما تنفذش تمام؟ يبقى
باختصار يا جماعة الـ finally بالضمن في حالات محدودة
لما يكون عندي code بدّه يتنفذ في كل الأحوال سواء
حصل خطأ أو ما حصلش خطأ بناء
على الكلام اللي حكيته تعال نشوف السؤال هذا
suppose
that statement to cause an exception يعني السطر هذا
بيعمل خطأ وهي شكل الـ code في عندي try فيها
statement 123 و بعدين عندي except exception 123 و
بعدين في عندي final فيها statement 4 و بعدين في
عندي statement 5 answer the following question
will statement 5 be executed if the exception is
not caught
لأ إيش an exception not caught يعني ما تمش معالجة
الخطأ بقيت البرنامج ما لها مش هتتنفذ لأ الجواب no
if the exception is of type exception 3 يعني إذا
الخطأ اللي طالع عندي كان من نوع exception 3 إيش
بستفيد أنا من الكلمة اللي حكالها أن الخطأ بتعالج
will statement 4 be executed هتتنفذ في كل حالة
هتتنفذ طب و الـ statement five be executed؟ اه
هتتنفذ طب
أنا متواضع من عندي إن لو حصل خطأ ما تمش معالجته
هتتنفذ الـ statement أربعة؟ اه هتتنفذ في كل
الأحوال، بس خمسة لأ
ما يتم إظهاره عند إدارة البرنامج التالفة عند list
عشرة في الصفر و بعدين أخد list تسعة و أضعها في X و
أقوم بالـ print و بعدين أقبل index error تمام؟ على
فكرة في خطأ هنا في الف هنا زيادة
طيب اعتبروا الـ ثدر مش موجودة طبعًا طيب إيش رأيكوا
إيش هيتنفذ في الـ code هذا طبعًا هو فيش عندي خطأ صح
هي طبع لي done و هيتنفذ مين كمان finally و هينفذ مين
الـ continue بعدها هي اللي هاطبع مع الشاشة
طب الظاهر إنه بينفع نحط else في الـ header مش مشكلة
طيب هذا السؤال حصل فيه خطأ صح ولا؟ لأن هذه نفس
السؤال عندي عشرة و قلت له list عشرة تمام؟ في حالة
الخطأ هذا طبعًا done هذي مش هتم طبعه أي .. أي .. أي
خطأ بتعالج index error هيطلع لـ index out of bound
تمام؟ و بعدين هيروح يطبع finally finally we are
here و بعدين هينفذ continue واضحة يا جماعة؟ هذا حصل
عندي خطأ .. هذا الدرمش هيتنفذ هتطلع لـ index out of
bound و الـ final هيتنفذ في كل الأحوال و بعدين
هينفذ continue هذا مش مهم .. ما .. ما تعملش معاه مش
مهمة اه
خلاص اعتبرها مش موجودة طيب
هذه نقطة كويسة برضه What is wrong in the following
code؟ إيش المشكلة في الـ code هذا؟ عندي try حاطط
عندي some code here أي code يعني و بعدين عامل كام
except 10 10 arithmetic error و حاجة اسمها zero
division error تمام؟ و بعدين في عندي print هنا هذه
اللي ما حكتكوش إياها إيش الخطأ اللي موجود هنا
القاعدة اللي بيقول إياها أن أنت لما تحط أكثر من
except حط الخاص و بعدين حط العام إيش معناه الكلام
هذا تعالى
بالمثال اللي عندنا هنا أنا ممكن أجي أعمل accept
طلعوا معايا هنا عندي أنا كام exceptions؟ أربع
هدول exceptions خاصة و هدى عامة بقول لي غلط إنك
تحط هدى جابل هدول و السبب السبب لأن هو لما ييجي
يفحص الأخطاء بيفحص بالترتيب معناه إنه في الحالة
هدى إنه كل الأخطاء هيروح ينفذ .. ينفذ أول واحدة
تمام؟ هو هيفحص بالترتيب الأصل إن أنا أفحص الخاص و
لو ما لقيتش ولا واحد بعد يروح نفذ العام تمام؟ هيك
.. يعني هدول ما لهمش قيمة هدول ما لهمش قيمة صح
ولا؟ لأن معناها إن لو حصل أي خطأ عندي في الدنيا
أروح نفذ هذه واضح يا جماعة؟ تمام؟ فدايمًا حط ..
العام بعد الخاص الآن هنا بيجي طبعًا arithmetic
error هذا خطأ اسمه خطأ رياضي بمعنى أي عملية حسابية
صار فيها خطأ طبعًا قسم على صفر أو أي مثلًا overflow
أو أي خطأ حسابي طبعًا هيتنفذ معناه إن الأياد عمرها
ما تتنفذ لأن الـ division by zero يعتبر برضه إيش
arithmetic error طبعًا
لأن طبعًا هو في الكتاب عامل رسمة هذه
بس عشان نلقي نظرة عنها نشوف إيش أنواع ال
exceptions اللي موجودة عندي في الـ python بقول
ليه الـ exceptions في الـ python لها الشجرة أو ال
hierarchy هذه إنه مثلًا الـ exception الأساسي اسمه
إيش بنسميه base exception بتفرع منه إيش exception
بتفرع منه حاجة اسمها standard error وبعدين بتيجي
الأخطاء متفرعة منهم في عندي مثلًا حاجة اسمها
arithmetic error اللي هو أخطاء إيش رياضية اللي من
ضمنها zero division error يعني ألاحظ إن ال
exception عام وهذا ما له هذا خاص صح؟ يبقى المفروض
إن أنت لما تعالج .. تعالج هذا قبل ما تعالج ال
exception مثلًا صح أو لا؟ اه بالظبط الخاص من اللي
تحت، تمام؟ في الأول أنت بتفحص الخاص اللي هو اللي
تحت، بعدين بتفحص العام مثلًا Zero Division Error
نوع من أنواع الـ Arithmetic Exception الـ
Environment Error بتفرع منه مثلًا حالة اسمها IO
Error و OS Error و درباكوا لسه فيه تفرعات أكثر يعني
مثلًا الـ IO Error بتفرع مثلًا لـ File Not Found
Exception يعني شفتوا الـ File Not Found واحد من
مين من الـ IO Errors اللي هي جزء من الـ Environment
Error في تفرعات بتنزل كتير و هذه أنواع مختلفة من ال
errors إحنا أشبهم اللي بيعنينا من هذه إن أنا كل
ما نزلت تحت في الشجرة كل مكان خاص أكثر فلازم
أعالجه قبل مين؟ قبل العام بس إحنا ما نحفظش هذه
الرسمة هاي الفايدة إن إحنا نطلع عليه طيب
هي خلصنا موضوع الـ exception handling بس لسه
ما خلصناش المحاضرة تمام؟
خلينا جماعة نحل سؤال واحد write
a program that removes all the occurrences of a
specified string from a text file يعني
طلب من عندي برنامج، البرنامج بدّه يروح لملف تمام؟ و
كلمة معينة في الملف يستبدلها عندي أنا ملف بدي أشيل
مثلا كل كلمة أحمد أحط نضالها محمد أو كل كلمة
إسرائيل أحط نضالها فلسطين تمام؟ احنا كنا نعملها
في ال string هنجد من السر نعملها وين؟ في file نفس
الحاجة تماما الإختلاف إيش أنه أنا لازم أقرأ ال
file في الأول و أغير و بعدين نكتبه ثاني لاحظوا
الموضوع صار تراكمي يا جماعة و بنأكد دائما انه كل
محاضرة جاية معتمدة على اللي قبل فاللي بيتبقاش في
الأول مش هيتبقى في الآخر، هذه مادة بنفعش تندرس في
يوم الامتحان زي المواد .. زي مواد الحفظ، متطلبات
الجامعة مثلا، بنفعش تيجي قبل بيومين، اه والله خلاص
قبل بيومين ب .. بدرسها، هذه ما زالتش فيها، لازم من
الأول ندرس، و إذا تدرسها في الأول بترتاح، تيجي يوم
الامتحان ما فيش داعي تدرسها أصلا المتابعة أول بأول
ضرورية يا جماعة بأكد يعني كل محاضرة أنا على
الموضوع هذا و على الفاضل طيب نيجي الآن يا جماعة
نقرأ احنا ملف تمام
مثلا زي ما قلنا ناخد المثال اللي قلنا نقرأ ملف
نستبدل كل كلمة إسرائيل بالـ فلسطين تمام I live in
Israel
is an independent country in Asia visit
Israel for tourism طيب
بدنا في الملفة نكتب برنامجيفتح الملف ويقرأ المحتوى
ويستبدل الكلمة ويعدل الملف تمام بسيط
جدا أول حاجة لازم أشعمل افتح الملف تمام
وهي
read تمام
ما هو أنا أول حاجة ببدأ أقرأ دربارك يعني لازم في
الأول أقرأ و بعدين بكتب هذا السؤال في عمليتين في
قراءة و في كتابة append معناه ايه انه كمل على الملف
أنا ما بديش أكمل على الملف أنا بدي أغير محتوى الملف
كلمة أشيل بدلها كلمة للأسف ما فيش طريقة ان أنا أعدل
في الملف هو البيانات في الملف لازم ما فيش حلول أنا
أقرأ محتوى الملف أجيبه عندي و أعدل فيه و بعدين
بكتبه واضح يا جماعة؟ طيب قرأ .. لسه هنا أنا روحت ..
ربطت object في الملف اللي هو file هذا و بعدين باجي
file كيف نقرأ محتوى الملف؟ في طرق ت .. في ثلاث طرق
طبعا؟ في read و في read lines و في read line
بتهلوب طبعا؟ الآن بدون أن أنا عندي الملف صغير
طبعا؟ لأ على طول بقوله read Read بترجع لي كل محتوى
الملف في ال string صح أو لا؟ Read line الواحدة
بترجع لي سطر واحد فبلزمني أعملها loop Read lines
بترجع لي محتوى الملف كله في list بتمشي الحال read
lines برضه بس أنا .. يعني مدام أنا بدي .. بدي أجيب
المص كله ك string واحدة أقوله file.read جاب لك
محتوى الملف كله وين في متغير اسمه content الآن احنا
أخذنا method اسمها content.replace صحيح و عليها
ممكن
نعمل جميعها close أو بعدها مش مشكلة أي file دوت هو
الأفضل أنك تعمل أول بأول close صحيح طبعا الآن روحت
لـ content قلت له replace h بـ h تمام؟ اه و عشان نضمن
ممكن واحد هيك حاطط له Israel في small letter تمام؟
اه فما .. كمان بدي أقوله انه لما تقرأ الملف امشي
اعمل read و اعمل lower انه حولناها ايش؟ اه لـ lower
case تمام؟ و بعدين قلت له replace كل كلمة Israel
بدلها بإيش؟
تمام؟ لحظة انتبهوا على نقطة مهمة هذه في غلطة هنا
مين يقول لي ايش هي؟ اه لأ replace بتستبدل كله اه
لازم نحطها في متغير ليش؟ احنا قلنا يا جماعة ان ال
string أنا ما أقدرش أعدل عليها صح؟ ال replace هذه
بتعدلش على ال string الأصلية بترجع ال string جديدة
تمام؟ فلازم ان أعمل متغير جديد أو ايش أعدل على ال
content و أعدل على المتغير الأساسي واضحة يا جماعة
الـ dot replace تمام بتعدلش على ال string الأساسية
بترجعها لـ string جديدة فلل string الجديدة رجعت
خزانتها وين في ال content بدل ما أعمل متغيرات كثيرة
فعملت نفس المتغير اللي أنا بضل عليه خطوة واحدة
إيش هي إن المحتوى هذا بدنا نكتبه في الملف صح؟ لأ
لحظة أنا خلصت الملف سكرتة بدّا أرجع أفتحه ثاني ل
right اه الصح إن أنت بدك تقرأ من الملف افتحه لـ read
و يقرأ و يسكر بدك تفتحه لـ right افتحه ثاني لـ right
و أكتب و أسكر واضح يا جماعة؟ فبدأ أروح الآن أقوله
file يساوي open مرة ثانية مستحيل أكتب right بعد ما
حطيت close هي طبعا error أنا عملت close برجع أعمل
لازم أعمل open ثاني تمام؟ و أصلا حتى لو ما عملتش
close مش هقدر أكتب على الملف ليش؟ لأن أنا ايش حاطط
هنا؟ read مش هقدر أكتب بكل الأحوال حتى لو أنا مش
هعمل close واحد بيقول لي طب ماشي أنت خليها خلي ال
close في الآخر و تعال هنا و اعمل write يعني بينفع
أنا اعمل ايه؟ file.write؟ اه ما ينفعش أنا مدام
فاتحة لـ read بقدر بس اعمل ايش؟ read حتى لو عملنا R
زائد ممكن تعملي مشاكل برضه طبعا الطريقة الأفضل ان
أنت اقرأ و خلص و بعدين اكتب ثاني طيب
يبقى أنا بعد ما قرأت محتوى الملف و قلت له file
.close الآن برجع بفتح الملف ثاني file.open نفس
الملف بس الآن بفتح له كتابة طبعا كتاب الـ W مش A A
هيعملي append هيخلي النص الأساسي و يضيف نص جديد
تحته لكن الـ W هذه بشيل الجديد و بحط واحد جديد صح؟
الآن بعدين بقول الـ file.write
الـ content و بقول له file dot
close التعامل معه مرة خلص التنفيذ تمام
و هو ايش عمل استبدل كل الـ إسرائيل بالـ فلسطين طبعا
يعني احنا لما نتعامل مع ملف فات نتعامل مع string في
النهاية، صح أو لا؟ يبقى كل اللي اخذناه في ال
string هو اللي هنستخدمه في برامجنا يعني كل التعامل
مع الـ file مجرد بس ايش open و read و write باقي
الشغل ايش؟ شغل الـ string أو list زي أنا مثلا
قرأتها بـ read lines فعشان هيك هذا الموضوع معتمد
على الموضوع السابق المحاضرة اللي جاي إن شاء الله
هنكمل بعض التمرين اللي علاقة بالـ files