نقل قول: رد کردن خطا در try
نقل قول:
نوشته شده توسط
mahyar501
سلام. چطور می تونم وقتی خطایی در try رخ میده رو رد کنم و برنامه به بقیه کاراش برسه.
مثلا من یه foreach گرفتم و یکی یکی روی فایلهای سرچ شده کار انجام میدم. حالا یه خطایی رو یکی از فایلها رخ میده و در catch تو بانک خطا رو ذخیره میکنم. ولی نمی خوام foreach متوقف بشه و ادامه فایلها رو بررسی کنم:
foreach (...)
{
try{
کدهای مربوط به بررسی فایل
}
catch()
{
ثبت خطا در بانک
}
}
سلام چرا حلقه foreach خارج از بدنه Try{} است؟!
نقل قول: رد کردن خطا در try
نقل قول:
نوشته شده توسط
daniyaltjm
سلام چرا حلقه foreach خارج از بدنه Try{} است؟!
به صورت مثال گفتم. اون خودش داخل یه try دیگه هستش. من میخوام اگه فایلم خطا داشت بره سراغ فایل بعدی و برنامه متوقف نشه
نقل قول: رد کردن خطا در 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
نقل قول: رد کردن خطا در 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 فرستاده شده ونمایش داده شده.
نقل قول: رد کردن خطا در 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 فرستاده شده ونمایش داده شده.
با تشکر. من چند هزار فایل انکریپت شده دارم. و یکی یکی از بانک آدرسشونو میخونم و دیکریپت میکنم. حال تو این فایلها بعضیاشون بدلایلی دیکریپت نیمشن . خطا میده. میخوام اون رو رد کنه و به بقیه فایلها برسه.
در حالت کنونی، به خطا که میرسه دیگه جلو نمیره
نقل قول: رد کردن خطا در try
سلام ،
دوست گرامی کد شما صحیح به نظر میاد ، اگر در اجرا اون کاریو که شما میخواین انجام نمیده احتمالا مشکل از جای دیگست ، اگر بخشی از کد رو به اشتراک بذارین میشه بررسی کرد.
نقل قول: رد کردن خطا در try
نقل قول:
نوشته شده توسط
ShayanFiroozi
سلام ،
دوست گرامی کد شما صحیح به نظر میاد ، اگر در اجرا اون کاریو که شما میخواین انجام نمیده احتمالا مشکل از جای دیگست ، اگر بخشی از کد رو به اشتراک بذارین میشه بررسی کرد.
با سپاس از شما
نقل قول: رد کردن خطا در try
با اجازه اساتید
اگه برای دیکریپت فایل از تابع استفاده کرده باشین و اون تابع خطاهاش مدیریت نشده باشه از حلقه میپره بیرون
نقل قول: رد کردن خطا در try
نقل قول:
نوشته شده توسط
mahyar501
با تشکر. من چند هزار فایل انکریپت شده دارم. و یکی یکی از بانک آدرسشونو میخونم و دیکریپت میکنم. حال تو این فایلها بعضیاشون بدلایلی دیکریپت نیمشن . خطا میده. میخوام اون رو رد کنه و به بقیه فایلها برسه.
در حالت کنونی، به خطا که میرسه دیگه جلو نمیره
خب اول کد رو بدون try , catch اجرا کن ببین برای چی خطا میده! مثلا تو کد بالا تقسیم بر 0 خطا ایجاد میکنه که با دستور if توی try اصلا اجازه ندادیم که تقسیم انجام بشه و یه خطا به سمت catch فرستاده شد حالا با توجه به الگوریتم دیکیریپتی که داره روی فایل ها اجرا میشه شاید چند پارامتر رو باید توی دستور if با هم && کنی که خطا نده یا چیزای دیگه ... باید کد های قسمت دیکریپت رو بزاری تا اساتید بررسی کنن.
نقل قول: رد کردن خطا در try
نقل قول:
نوشته شده توسط
mahyar501
سلام. چطور می تونم وقتی خطایی در try رخ میده رو رد کنم و برنامه به بقیه کاراش برسه.
مثلا من یه foreach گرفتم و یکی یکی روی فایلهای سرچ شده کار انجام میدم. حالا یه خطایی رو یکی از فایلها رخ میده و در catch تو بانک خطا رو ذخیره میکنم. ولی نمی خوام foreach متوقف بشه و ادامه فایلها رو بررسی کنم:
foreach (...)
{
try{
کدهای مربوط به بررسی فایل
}
catch()
{
ثبت خطا در بانک
}
}
داخل قسمت catch کافیه دستور continue رو بنویسی
اگر خطا ایجاد بشه رد میکنه میره سراغ بعدی