منبع اصلی نوشتار زیر در این لینک قرار دارد

خطای KeyError در پایتون

در پایتون و هنگام کار با نوع داده‌ی دیکشنری (dictionary) اگر کلیدی که مقدار اون رو در‌خواست دادیم وجود نداشته باشه خطای KeyError دریافت می‌کنیم:

>>> dict1
{1: 4, 2: 5}
>>> dict1[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 3

Post Qr Code

طبیعی هست که این خطا باعث می‌شه که اجرای برنامه با مشکل مواجه بشه. حالا سؤالی که پیش میاد این هست که: I) برای جلوگیری از این مشکل چی کار کنیم؟
اگه روال برنامه به نوعی باشه که لازم داشته باشیم مقدار کلید‌هایی که توی دیکشنری پیش‌بینی نشدن رو یه مقدار پیش‌فرض برگردونه II) باید چی کار بکنیم؟

جواب سؤالات بالا رو می‌تونیم با متد try…except بدیم. به این صورت که دستور print یا هر دستوری که به مقدار یه کلید توی دیکشنری می‌خواد دست پیدا کنه رو توی قسمت try می‌نویسیم و در قسمت except وقوع خطا رو بررسی می‌کنیم و اگه خطایی رخ داد (I) برای حل سؤال اوّل یه پیغام برمی‌گردونیم و کاربر رو مطلع می‌کنیم و متناسب با اون کنترل رو به قسمت صحیح برنامه منتقل می‌کنیم یا (II) برای حل سؤال دوّم یه مقدار پیش‌فرض برمی‌گردونیم و بدون اینکه کاربر بدونه برنامه به کارش ادامه می‌ده :)

>>> dict1
{1: 'One', 2: 'Two'}
>>> try:
...     print(dict1[3])
... except KeyError as err:
...     print("The dictionary don't has this key.")
... 
The dictionary don't has this key.

>>> dict1
{1: 'One', 2: 'Two'}
>>> try:
...     print(dict1[3])
... except KeyError as err:
...     print("Number")
... 
Number

امّا آیا این تنها راهیه که داریم، طبیعی هست که جواب نه باشه. نوع داده دیکشنری یه صفت به اسم get داره که کارش همینه:

get(...)
    D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.

یعنی هر دو سؤال بالا رو توی یه خط هم می‌شه جواب داد:

>>> print(dict1.get(3, "The dictionary don't has this key."))
The dictionary don't has this key.

>>> print(dict1.get(3, "Number"))
Number

نکته: به syntax این صفت و تفاوتش با syntax دیکشنری خالی توجه کنید!

«منبع»



برچسب ها : , , ,