نمایش نتایج 1 تا 11 از 11

نام تاپیک: رد کردن خطا در try

  1. #1

    رد کردن خطا در try

    سلام. چطور می تونم وقتی خطایی در try رخ میده رو رد کنم و برنامه به بقیه کاراش برسه.
    مثلا من یه foreach گرفتم و یکی یکی روی فایلهای سرچ شده کار انجام میدم. حالا یه خطایی رو یکی از فایلها رخ میده و در catch تو بانک خطا رو ذخیره میکنم. ولی نمی خوام foreach متوقف بشه و ادامه فایلها رو بررسی کنم:
     foreach (...)
    {
    try{
    کدهای مربوط به بررسی فایل
    }
    catch()
    {
    ثبت خطا در بانک
    }

    }


  2. #2
    کاربر دائمی آواتار daniyaltjm
    تاریخ عضویت
    شهریور 1390
    محل زندگی
    AHvaz
    پست
    327

    نقل قول: رد کردن خطا در try

    نقل قول نوشته شده توسط mahyar501 مشاهده تاپیک
    سلام. چطور می تونم وقتی خطایی در try رخ میده رو رد کنم و برنامه به بقیه کاراش برسه.
    مثلا من یه foreach گرفتم و یکی یکی روی فایلهای سرچ شده کار انجام میدم. حالا یه خطایی رو یکی از فایلها رخ میده و در catch تو بانک خطا رو ذخیره میکنم. ولی نمی خوام foreach متوقف بشه و ادامه فایلها رو بررسی کنم:
    foreach (...)
    {
    try{
    کدهای مربوط به بررسی فایل
    }
    catch()
    {
    ثبت خطا در بانک
    }

    }
    سلام چرا حلقه foreach خارج از بدنه Try{} است؟!

  3. #3

    نقل قول: رد کردن خطا در try

    نقل قول نوشته شده توسط daniyaltjm مشاهده تاپیک
    سلام چرا حلقه foreach خارج از بدنه Try{} است؟!
    به صورت مثال گفتم. اون خودش داخل یه try دیگه هستش. من میخوام اگه فایلم خطا داشت بره سراغ فایل بعدی و برنامه متوقف نشه

  4. #4
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    43
    پست
    6,285

    نقل قول: رد کردن خطا در try

    بر اساس منطق، وقتی خطایی داخل بلوک Try رخ بده، ادامه کدهای بعد از اون خطی که باعث خطا شده دیگه اجرا نمیشه و ادامه اجرا به بلوک Catch منتقل میشه. در کدی که شما نوشته اید با توجه به اینکه بلوک try..catch داخل حلقه foreach است ترکیب درست به نظر می رسد (اجرای حلقه اصولا باید ادامه پیدا کنه) مگر اینکه در عمل رفتار طور دیگری باشه (حلقه بعد از اولین خطا اجرا نشه). در مثال زیر:
    List<int> numbers = new List<int>() {1,2,3,4,5,6};
    foreach (int number in numbers)
    {
    try
    {
    if (number == 3)
    {
    throw new Exception($"Intentional Exception on {number}");
    }
    Console.WriteLine($"Current Number is {number}");
    }
    catch
    {
    Console.WriteLine($"Handling {number} caused an exception.");
    }
    }

    این خروجی تولید میشه:
    Current Number is 1
    Current Number is 2
    Handling 3 caused an exception.
    Current Number is 4
    Current Number is 5
    Current Number is 6

  5. #5
    کاربر دائمی آواتار daniyaltjm
    تاریخ عضویت
    شهریور 1390
    محل زندگی
    AHvaz
    پست
    327

    نقل قول: رد کردن خطا در try

    اول باید ببینی خطا چرا تولید میشه ... بعد باید با دستور if توی قسمت try بررسی کنی که اگر خطا رخ داد با استفاده از throw new یک خطا بصورت دستی تولید میکنیم و به قسمت catch ارسال میشه .

     int[] a = new int[] { 1, 2, 3, 4, 5, 0, 7, 8, 9, 10 };
    foreach (int num in a)
    {
    try
    {
    if (num == 0)
    {
    throw new DivideByZeroException();
    }
    else
    {
    Console.WriteLine(num / num);

    }
    }
    catch (Exception error)
    {
    Console.WriteLine(error.Message);
    }
    }


    1
    1
    1
    1
    1
    Attempted to divide by zero.
    1
    1
    1
    1


    همینطور که میبینی نه بار اعداد رو بهم تقسیم کرده و اونجایی هم که تقسیم بر 0 شده خطا به قسمت catch فرستاده شده ونمایش داده شده.
    آخرین ویرایش به وسیله daniyaltjm : جمعه 27 تیر 1399 در 19:52 عصر

  6. #6

    نقل قول: رد کردن خطا در try

    نقل قول نوشته شده توسط daniyaltjm مشاهده تاپیک
    اول باید ببینی خطا چرا تولید میشه ... بعد باید با دستور if توی قسمت try بررسی کنی که اگر خطا رخ داد با استفاده از throw new یک خطا بصورت دستی تولید میکنیم و به قسمت catch ارسال میشه .

     int[] a = new int[] { 1, 2, 3, 4, 5, 0, 7, 8, 9, 10 };
    foreach (int num in a)
    {
    try
    {
    if (num == 0)
    {
    throw new DivideByZeroException();
    }
    else
    {
    Console.WriteLine(num / num);

    }
    }
    catch (Exception error)
    {
    Console.WriteLine(error.Message);
    }
    }


    1
    1
    1
    1
    1
    Attempted to divide by zero.
    1
    1
    1
    1


    همینطور که میبینی نه بار اعداد رو بهم تقسیم کرده و اونجایی هم که تقسیم بر 0 شده خطا به قسمت catch فرستاده شده ونمایش داده شده.
    با تشکر. من چند هزار فایل انکریپت شده دارم. و یکی یکی از بانک آدرسشونو میخونم و دیکریپت میکنم. حال تو این فایلها بعضیاشون بدلایلی دیکریپت نیمشن . خطا میده. میخوام اون رو رد کنه و به بقیه فایلها برسه.
    در حالت کنونی، به خطا که میرسه دیگه جلو نمیره

  7. #7
    کاربر دائمی آواتار ShayanFiroozi
    تاریخ عضویت
    شهریور 1397
    محل زندگی
    بندرعباس ، خلیج همیشه فارس
    سن
    34
    پست
    163

    نقل قول: رد کردن خطا در try

    سلام ،

    دوست گرامی کد شما صحیح به نظر میاد ، اگر در اجرا اون کاریو که شما میخواین انجام نمیده احتمالا مشکل از جای دیگست ، اگر بخشی از کد رو به اشتراک بذارین میشه بررسی کرد.

  8. #8

    نقل قول: رد کردن خطا در try

    نقل قول نوشته شده توسط ShayanFiroozi مشاهده تاپیک
    سلام ،

    دوست گرامی کد شما صحیح به نظر میاد ، اگر در اجرا اون کاریو که شما میخواین انجام نمیده احتمالا مشکل از جای دیگست ، اگر بخشی از کد رو به اشتراک بذارین میشه بررسی کرد.

    با سپاس از شما

  9. #9
    مدیر بخش آواتار محمد رضا فاتحی
    تاریخ عضویت
    مهر 1387
    محل زندگی
    کهنسالترین موجود زنده در شهر منه
    پست
    1,160

    نقل قول: رد کردن خطا در try

    با اجازه اساتید
    اگه برای دیکریپت فایل از تابع استفاده کرده باشین و اون تابع خطاهاش مدیریت نشده باشه از حلقه میپره بیرون
    یک نقطه بیشتر فرق بین رحیم و رجیم نیست...از نقطه ای بترس که شیطانیت می کند

    ________________________

  10. #10
    کاربر دائمی آواتار daniyaltjm
    تاریخ عضویت
    شهریور 1390
    محل زندگی
    AHvaz
    پست
    327

    نقل قول: رد کردن خطا در try

    نقل قول نوشته شده توسط mahyar501 مشاهده تاپیک
    با تشکر. من چند هزار فایل انکریپت شده دارم. و یکی یکی از بانک آدرسشونو میخونم و دیکریپت میکنم. حال تو این فایلها بعضیاشون بدلایلی دیکریپت نیمشن . خطا میده. میخوام اون رو رد کنه و به بقیه فایلها برسه.
    در حالت کنونی، به خطا که میرسه دیگه جلو نمیره
    خب اول کد رو بدون try , catch اجرا کن ببین برای چی خطا میده! مثلا تو کد بالا تقسیم بر 0 خطا ایجاد میکنه که با دستور if توی try اصلا اجازه ندادیم که تقسیم انجام بشه و یه خطا به سمت catch فرستاده شد حالا با توجه به الگوریتم دیکیریپتی که داره روی فایل ها اجرا میشه شاید چند پارامتر رو باید توی دستور if با هم && کنی که خطا نده یا چیزای دیگه ... باید کد های قسمت دیکریپت رو بزاری تا اساتید بررسی کنن.

  11. #11

    نقل قول: رد کردن خطا در try

    نقل قول نوشته شده توسط mahyar501 مشاهده تاپیک
    سلام. چطور می تونم وقتی خطایی در try رخ میده رو رد کنم و برنامه به بقیه کاراش برسه.
    مثلا من یه foreach گرفتم و یکی یکی روی فایلهای سرچ شده کار انجام میدم. حالا یه خطایی رو یکی از فایلها رخ میده و در catch تو بانک خطا رو ذخیره میکنم. ولی نمی خوام foreach متوقف بشه و ادامه فایلها رو بررسی کنم:
     foreach (...)
    {
    try{
    کدهای مربوط به بررسی فایل
    }
    catch()
    {
    ثبت خطا در بانک
    }

    }
    داخل قسمت catch کافیه دستور continue رو بنویسی
    اگر خطا ایجاد بشه رد میکنه میره سراغ بعدی

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •