raising exception

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/05/11
  • تعداد بازدید: 419

برای ایجاد و پرتاب یک استثنا (Exception)، می‌توانید از دستور raise استفاده کنید. این دستور باعث می‌شود اجرای برنامه متوقف شده و خطای مشخص شده صادر شود.

print(1)
raise ValueError
print(2)  # این خط اجرا نمی‌شود

خروجی:

>>>
1
ValueError
>>>

نکته: هنگام استفاده از raise باید نوع استثنا را مشخص کنید. همچنین می‌توانید پیام خطای دلخواه یا داده‌های اضافی را به عنوان آرگومان به استثنا ارسال کنید تا اطلاعات بیشتری ارائه شود. مثلاً:

name = "123"
raise NameError("Invalid name!")

خروجی:

>>>
NameError: Invalid name!
>>>

در بلوک except نیز می‌توان با استفاده از raise بدون آرگومان، استثنای فعلی را دوباره پرتاب کرد. این کار برای انتقال خطا به لایه‌های بالاتر و یا ثبت خطا قبل از ادامه‌ی پرتاب آن مفید است. مثلاً:

try:
    num = 5 / 0
except:
    print("An error occurred")
    raise

خروجی:

>>>
An error occurred

ZeroDivisionError: division by zero
>>>

استفاده از args برای دسترسی به پارامترهای خطا

هر شیء استثنا دارای ویژگی args است که پارامترهای ارسال‌شده به استثنا را به صورت یک tuple برمی‌گرداند:

try:
    raise ValueError("value error message", 42)
except ValueError as e:
    print(f"exception: {e}")
    print(f"args: {e.args}")
    print(f"arg 0: {e.args[0]}")
    print(f"arg 1: {e.args[1]}")

خروجی:

exception: ('value error message', 42)
args: ('value error message', 42)
arg 0: value error message
arg 1: 42

در نسخه‌های جدید پایتون (از پایتون 3.11 به بعد)، قابلیت Exception Groups و کلیدواژه except* معرفی شده است تا بتوان هم‌زمان چند استثنا (Exception) را در قالب یک گروه مدیریت کرد. این ویژگی برای مواقعی کاربرد دارد که چند خطا به طور همزمان رخ دهند، مثل در برنامه‌های موازی یا هم‌زمان (concurrent)، و نیاز باشد به صورت یکجا آنها را دسته‌بندی و هندل کرد.

در حالت معمولی، اگر چند خطا هم‌زمان رخ دهند، پایتون فقط اولین خطا را نمایش می‌دهد و بقیه از دست می‌روند. اما با Exception Groups می‌توان چندین خطا را در قالب یک گروه (exception group) جمع‌آوری کرد و با استفاده از except* آنها را جداگانه یا گروهی مدیریت کرد.

نمونه ساده‌ای از ExceptionGroup و except*:

try:
    raise ExceptionGroup("Multiple errors occurred", [
        ValueError("Invalid value"),
        TypeError("Wrong type")
    ])
except* ValueError as e:
    print(f"Caught ValueError: {e}")
except* TypeError as e:
    print(f"Caught TypeError: {e}")

خروجی:

Caught ValueError: Invalid value
Caught TypeError: Wrong type

توضیح:

  • در این مثال، یک ExceptionGroup ایجاد شده که دو استثنا یعنی ValueError و TypeError را در خود دارد.
  • با استفاده از except* می‌توان به صورت جداگانه هر نوع استثنا را مدیریت کرد.
  • این امکان اجازه می‌دهد که خطاهای مختلف را به صورت موازی و هم‌زمان هندل کنیم بدون اینکه یکی باعث نادیده گرفتن دیگری شود.

 

در کل، ExceptionGroup و except* ابزارهای قدرتمندی هستند که باعث بهبود مدیریت استثناها در برنامه‌های پیچیده و موازی می‌شوند، مخصوصاً زمانی که چندین خطا به طور همزمان ممکن است رخ دهند.

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد
0/600

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.