طيب يا جماعة السلام عليكم في المحاضرة الماضية
تقريبا خلصنا موضوع القراءة و الكتابة من الملفات
طبعا احنا غطينا ال basics بعد هيك هنشوف أمثلة أو
هنحل أسئلة تطبيقية بس قبل ما نخلص أو قبل ما نبدأ
بالأسئلة في لسه جزئية في ال chapter مخلصنهاش اللي
هي حاجة اسمها ال exception
Exception Handling 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
أنا بحكي أرقام مفروض أن أحولهم إيا لإنت يا ل 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
يعني حولليها لإنتجر و رجع خزنليها تاني وين في ال 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 و
بعدين أخيتهم بتحط كلمة acceptو الأسطر كلهم بتحطهم
جوا مين؟ جوا ال try block بين ال try و بين ال
accept تمام؟ إيش اللي هيصير الآن؟ الآن هيبدأ ينفذ
البرنامج إذا نفذ بدون أخطاء هيشغل البرنامج عادل ال
try و ال accept ما لهو مش قيمة يعني إذا دخلت
الأرقام صحيحة وماقسمش على صفر بيشتغل و بيكمل وين؟
و بيكمل تحت انتبهوا معايا لأن مسار التنفيذ مهمهذا
لو ماكانش فيه إيش ماكانش فيه أخطاء هيشغّل هذا عادي
وهيشغّل هذا عادي يعني كأن ال try و ال accept ما
لهم .. ما لهم مش موجودة .. مالهم مش فايدة إيه
تقلهم فايدة لو حصل error؟ إيش اللي هيصير لو حصل
error؟ هذا بدنا نفهمها كويسة نكبرها شوية هاي ال
try وهي عند مجموعة أسطر هاي السطر الأول التاني
التالت الرابع وهي عند إيش كلمة acceptتمام؟ وهي إيش
ال accept أنا فاضي لحد الآن وهي إيش خمسة و ستة و
سبعة و تمانية البرنامج تبعى تمان سطور أربع منهم
محطوطين جوا مين ال try accept لاحظ هدولة عملتهم
indentation هدولة برا ال try accept تمام؟
زي ما حكيت، إذا هدول اشتغلوا، بيكمل وين؟ تحت ورا
كلمة من الـ trial except موجودين، لكن لو حصل خطأ
في أي سطر هنا، عند أي سطر، إيش بيصير؟ هيوقف عند
السطر اللي حصل فيه خطأ، تمام؟ مش هيوقف يطلع من
البرنامج، لأ، يعني مثلا، حصل خطأ هنا، نفذ هدوء،
إيش هيجي هنا؟ حصل عنده خطأ، هيروح وين؟ هيروح على
الـ except الـ except عادة، احنا بنحط فيها ال code
اللي يبلغني إيش الخطأ اللي حصل تمام؟ يعني ال code
اللي في ال accept هذا دلبلكوا ال code اللي في ال
accept مش من ضمن البرنامج عفوا مش من ضمن ال code
الأساسي للبرنامج هذا ال code اللي في ال accept
code خاص هيتنفذ فقط لو حصل خطأ واضحة يا جماعة؟
هيتنفذ فقط لو حصل خطأ يعني كإني أنا ال code هذا
اللي فيه مشكلة أنا أحطه بصورةتمام؟ ليه الصورة؟
عشان مايأثرش هالحاجات التانية لأ لو حصل أي خطأ من
أدولا تمام؟ هيروح ينفذ ال code الموجود في ال
accept يعني هيوقف عند السطر اللي حصل فيه خطأ تمام؟
و هيروح على ال accept عادة في ال accept نخلي يطبع
أيش الخطأ اللي طلع عندي تمام؟ بعد ما يقوللي أن في
خطأ طلع عندي بروح بكمل تنفيذ البرنامج عادي انتوا
معاه ولا لا يا جماعة؟أه مرة تانية إذا مافيش مشاكل
بشتغل عادي بنفذ ال try و بروح بكمل باقية البرنامج
code ال accept بتنفذش لو مافيش مشاكل طبعا لكن لو
حصل خطأ عند أي سطر من السطور بوقف عند السطر اللي
حصل عنده خطأ و بروح بنفذ ال code إيش اللي في ال
accept و بعدين بيكمل تنفيذ البرنامج ال accept أنا
استفدت منه أكتر من حاجة أول حاجة أنا ضمنت أن
البرنامج يستمر في الشغلتمام؟ مش انه لو حصل خطأ
خلاص يطلع يطلقلي الشاشة الحمراء هذه الحاجة التانية
ضمنها ان اعالج الخطأ بطريقة صحيحة ان اطلع المستخدم
رسالة يفهمها تمام؟ طيب هذا الكلام اللي حكيته
النظري خلينا نطبقه على المثال تبعنا هذا انا مثلا
عندى
في المثال اللي بينا ال code هذا انا متوقع يحصل فيه
خطأفأقولك لو حصل خطأ أي حاجة بدي أروح لف ال accept
و أطبع رسالة مكتوب فيها error تمام
لأن بعد ال try و ال accept ممكن يكون في أسطور تاني
يعني مثلا ممكن هنا يكون في print hello تمام list
واحد
اتنين تلاتة و بعدين for I in listprint I هذا
ال code المفروض
انه يأتي بعد ال code هذاماشي طيب شوفوا الآن لو حصل
خطأ عندي، لو البرنامج طبعا ببدأ التنفيذ من
البداية، هيجي ينفذ هنا، لو حصل خطأ عند أي جملة،
هيوقف التنفيذ عند السطر اللي حصل فيه مشكلة، و
هيروح يطبع ال إيش؟ يطبع ال error و هيكمل التنفيذ
من الجزء اللي تحتلو ما حصلش خطأ، ايش بيسوي؟ بنفذ
هدول و بعدين بنفذ مين؟ اللي تحت، لاحظ ان هدولة برا
الـ accept صح؟ هدا مش جوا الـ accept تعالى نشوف
كيف هيتنفذ البرنامج طيب،
هيرندخل الرقم الأول مثلا خمسة الرقم التاني ستة
الان طبعا مافيش مشكلة صح ولا دخلت أرقام صحيحة و
قسمهم و هيطلع ناتج القسمة و بعدين إيش هذا ال code
اللي تحت ال code اللي برا ال try except الان
تعالى نشوف إيش بيصير لو صرا عندي مشكلة دخلت الرقم
الأول أربعة الرقم التاني حطيته a a مثلا هذا خطأ
صح؟تعالى نشوف ايش بيصير اكبر
الشاشة بس هاي الناتج لإن دخلت طبع ال error و بعدين
طبع ال hello واحد اتنين تلاتة تكمل التنفيذعالأقل
هيك البرنامج ما وقفش ولا طلع الشاشة الحمرا دي صح
ولا ضمنت ان البرنامج يستمر في العمل حتى لو حصل خطأ
و بعدين هذا ال trial except ريحتني كمان ان مش كل
خطأ بدي أعالجه على حده و أحطله F في ال statement
صح ولا لأن في أخطأ ممكن أنا ماتوقعهاش يعني مثلا
الكتاب ع ملففي كتير أخطاء ممكن تحصل، ممكن الملف
مايكونش موجود، ممكن المجند مايكونش موجود، ممكن
الملف يكون موجود لكن ماليش permission أني أكتب
عليه، صح ولا؟ فبدل ما أنا أقف في ال statement عشان
أفحص كل حالة، خلاص ال code اللي أنا شايفه ملغم وفي
مشاكل كتير، بحطه بين try and except، بحيث أنه لو
حصل أي خطأ فيه، يوقف عند السطر اللي فيه خطأ وينفذ
لل code الموجود في ال exceptأيش بنحط في ال accept
عادة كيف نعالج الخطأ يعني ايش يعني كيف نعرف
لمستخدمه فيه خطأ نطبعله مثلا رسالة تمام أو غيره
واضحة النقطة هذه يا جماعة طيب شوفوا نجرب نفس ال
code هانا نفسه تعالى مرة دخلنا
مثلا اربعة ودخلنا رقم 2 صفر
أيش طبع ليه؟ طبع ال error لاحظ انه هل نفذ ال print
result؟ هد اتنفذت print result؟ لأ ليش؟ لأن ال
error one حصل حصل في السطر هذا التالت الأول
والتاني هدول مشيين لأنه هد خد أرقام صح التالت حصل
فيه خطأ لما اجي عمل عملية القسمة فوقف هنا معناه أن
هذا السطر ماله؟مش هيتنفذ وهيروح ينفذ مدام حصل خطأ
بنفذ ال code اللي في ال except و بعدين بيكمل بعده
لحد آخر البرنامج وهذا اللي صار عندهم واضح
يا جماعة طيب
نقطة
تانية
في مشكلة صغيرة انه لو حصل اي خطأ بتبعلي error صح
ولا؟ طيب ال error هذه مفيدة للمستخدم؟يعني عارف إيش
الخطأ اللي هيحصل عنده؟ هل هو الرقم الأول خطأ ولا
رقم التاني خطأ ولا قسمة على صفر ولا كتابة على ملف؟
ماعرفش إيش الخطأ، ماشي صح أنا ضمنت إن البرنامج يظل
شغال صح، تمام؟ لكن في النهاية الرسالة دي مش
informative، مابينتليش فعليا إيش نوع الخطأ اللي
صار عندى طب كيف ممكن نعمل تخصيص للرسالة؟انتبهوا
معايا، لأن ما بيقوله هو إذا حطت except بشكل هادر،
except لوجه الطين، معناه إنه لو حصل أي خطأ في ال
code الموجود بين try و accept،بتنفذ فقط الـ 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 لو مش فيه مشكلة يعني
انا دخلت الأرقام صح ستة و اتنين طبعا طيب ايش
المشكلة اه ال right ليش طلعلي خطأ ال right بتاخد
ال 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 هو كان يطلعني
رسالة من عنده صح ولا؟ فهل أنا بقدر مثلا أطبع
الرسالة اللي هو كان يكتبها؟ ممكن، كيف؟ تعالوا
معايا هنا طلع عندي value errorبكتب جنب الـ
ValueError As وقيمة أي Valuable XYZ يعني كأنه هنا
الـ ValueError خذ القيمة في الـ X في الـ X بعدين
بعدي جنب الـ Invalid Input مثلا بحط نجوطين زائد و
بعمل Str X
يعني كأنه هنا .. إيش عاملة يا جماعة؟ لو طلع عندي
value error as x بياخد هذا و بيخزنه في الـ x بعدين
قلت له اطبع ليه الـ x و نفس الحاجة لو طلع عندي
zero division error عشان ناخد الرسالة اللي بتطلع
مع ال error بنحط برضه as واسم أي متغير x, y, z
اللي بدك ويه تمام؟ و هنا برضه عشان نطبع الرسالة
ممكن نعمل زائد و نقول له star ال x
عند index error طالع برضه بخزن ال error بطلع في
متغير y يكل y و بعد هنا بطبع str ال y ال error
الأخير اش نعمل فيه يعني مثلا طالع عند error انا مش
عارف اش هو تمام بنعمل except و بنحط exception زي
هيك و بنقوله as xطبعا إيش هذا ال exception اللي
أنا كتبته هنا ال exception هذا خلينا نقول أبو ال
.. كل أنواع ال exceptions يعني هذا exception عام
جدا أي .. أي خطأ حصل ما تمش معارشته فوق هينفذ ال
except هذه و هيطلع عند exception هيخزنه في ال X
ليش عملت هيك الطريقة هذه على أساس أجي أقوله 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 طيب،
مالش، قبل التمرين، نقطة أخيرة، مش هشرحها على
الجهاز، بدي أشرحها على اللوحة
نفترض إن أنا عندي برنامج مكوّن من عشر سطور أو
مثلا، واحد، اتنين، تلات، أربع، خمس، ستة، سبعة،
تمان سطور، تمام؟ وعندي سطرين ممكن يحصل فيهم مشاكل،
تمام؟ value error، division by zero، index error،
يعني ممكن تحصل مشاكل هنا لأ، عشان أنا أحتاط
للمشاكل هذه، قولنا ممكن أحط try exceptطبعا يعني اي
code انا خايف منه بس حط قبله كلمة try طبعا و في
الآخر حط ايش except طبعا و هنا بتعالج الخطأ
بالطريقة اللي بدكية الان السؤال اللي انا عندي انا
ايش قولت السطرين اللي ممكن يحصل فيهم مشكلة هدولة
طب انا الان عندي خيارين هل احط بس السطرين هدولة ما
بين try and except ولا احط ال code كله بين try and
exceptيعني الآن في الحالة هذا الخيار الأول ان احط
ال code كله بين try and accept الخيار التاني ان بس
السطر الأولاني هذا خليه زي ما هو مش هذا السطر
الأول مافي مشكلة بعدين اجيب الأثنين التانين احطهم
هنا try و احط هنا accept هدولة
مين هذا السطر التانيوالتالت هيهم حطيتهم جوا try
and accept اللي انا خايف منهم الباقين انا مش خايف
منهم بحطهم برا ل try and accept اللي هم اربعة
وخمسة وستة وسبعة و تمانين عندنا سيناريو يعني
مفهومة مش اللي انا كتبته اه طب ايش رايكوا مين افضل
الحل الأول ولا التاني هذا الأول و هذا التاني اه
انا ممكن انا ممكن مش تاني لإن ممكن ماينفذش الباقى
طيب، كلامك صح و كلامك صح، تمام؟ الحل هو أنه ماقدرش
أحدد مين الحل الأفضل إلا بناء على ال 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 عادي عندي
أكتر من accept و بعدهم كلهم في عندي أيش هنا
statement four برا اللي try except answer the
following questionsWill statement 3 be executed؟
هو يقول إن هناك خطأ سيحدث عند الـ statement هل ال
statement 3 سيتنفذ؟ لأ طبعا احنا بيقول إن هناك خطأ
سيحدث هنا بيكمل في اللي بعد if
the statement is not caught ماذا يعني caught؟ ماضي
catch مانمسكش إيش يعني مانمسكش؟ يعني معناها إن
هدول ال acceptهدول الـ accept اللي هنا بيعالجوش
الخطأ اللي بطلع من هنا، يعني مثلا ممكن يكون هذا
division by zero و هدول value error و index error،
معناه أنه أنا ماعملتش accept لمعالجة الخطأ هذاهذا
معنى كلمة exception is not quote ما تعلجش will
statement for be executed ايش رأيكوا؟ لأ إذا حصل
خطأ ما تمش معالجته البرنامج هيوجف عنده كله هيوجف
معناه statement أربعة مش هيتنفذ طيب
if the exception is quotein 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 يعني قد نفذت مع إنه صار في خطأ تمام؟ طبعا
الكود اللي بعد ال 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 quote
لأ إيش an exception not quote يعني ماتمش معالجة
الخطأ بقيت البرنامج مالها مش هتتنفذ لأ الجواب 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
بتهلوب طبعا؟ الان بدون أن أنا عندى الملف صغير
طبعا؟ لأ على طول بقوله readRead بترجعلي كل محتوى
الملف في ال 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 أه الصح إن أنت بدك تقرأ من الملف افتحه لريد
و يقرأ و سكر بدك تفتحه ل 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