نحوه مدیریت خطاهای کلیدی در پایتون – با مثال کد
هنگام کار با دیکشنری ها در پایتون، اغلب با استثناهای KeyError
مواجه می شوید.
دیکشنری ها ساختارهای داده داخلی جفت ارزش کلیدی هستند. پس میتوانید با استفاده از کلید مربوطه به دنبال یک مقدار در زمان ثابت بگردید: dict[key]
value
برمیگرداند. اما اگر کلید در فرهنگ لغت وجود نداشته باشد چه؟ خوب، آن موقع است که یک KeyError
در پایتون دریافت می کنید.
چند راه مختلف وجود دارد که می توانید با چنین استثنائات KeyError
مقابله کنید. می توانید آنها را به صراحت مدیریت کنید یا از روش های فرهنگ لغت خاصی برای تنظیم مقادیر پیش فرض برای کلیدهای از دست رفته استفاده کنید. و در این آموزش با کدنویسی یک مثال ساده به روش های زیر نگاه خواهیم کرد:
استفاده از بلوکهای try-except
با استفاده از متد دیکشنری get()
استفاده از defaultdict
از ماژول collections
بیا شروع کنیم.
1. نحوه رسیدگی به استثناهای KeyError با بلوک های try-except
بیایید با مرور زمان رخ دادن خطاهای کلیدی و نحوه مدیریت این استثناها با استفاده از بلوکهای try-except
شروع کنیم.
چه زمانی یک خطای کلیدی رخ می دهد؟
در پایتون، یک استثنا KeyError
زمانی رخ می دهد که شما سعی می کنید به مقدار مربوط به کلیدی که وجود ندارد دسترسی پیدا کنید. فرهنگ لغت books
زیر را در نظر بگیرید:
books = { "1984": "George Orwell", "To Kill a Mockingbird": "Harper Lee", "The Great Gatsby": "F. Scott Fitzgerald" }
در فرهنگ لغت books
، کلیدها عنوان کتابها و مقادیر نام نویسندگان است. پس می توانید نویسنده کتاب را با استفاده از عنوان به عنوان کلید جستجو کنید.
حال بیایید سعی کنیم نویسنده کتابی را که در فرهنگ لغت وجود ندارد جستجو کنیم:
print(books["Brave New World"])
با استثنای KeyError
زیر مواجه خواهید شد:
Traceback (most recent call last): File "/home/balapriya/keyerror/main.py", line 7, in <module> print(books["Brave New World"]) ~~~~~^^^^^^^^^^^^^^^^^^^ KeyError: 'Brave New World'
نحوه رسیدگی به استثنائات KeyError
شما میتوانید با استفاده از بلوکهای try-except
بهصراحت چنین استثنائات KeyError
را مدیریت کنید:
try: value = dictionary[key] except KeyError: value = default_value
اینجا:
ما بلوک کدی را که ممکن است استثنایی ایجاد کند در بلوک try قرار می دهیم. در این حالت سعی می کنیم به مقدار مربوط به کلید دسترسی پیدا کنیم.
اگر یک KeyError
مطرح شود، با اختصاص یک مقدار پیشفرض، آن را در بلوک except
مدیریت میکنیم.
برای مثال فرهنگ لغت books
، ما داریم:
books = { "1984": "George Orwell", "To Kill a Mockingbird": "Harper Lee", "The Great Gatsby": "F. Scott Fitzgerald" } try: # Try to access the key "Brave New World" author = books["Brave New World"] # Catch the KeyError if the key does not exist except KeyError: author = "Book not found" print(author)
ما سعی می کنیم دوباره نویسنده «دنیای جدید شجاع» را جستجو کنیم. اما این بار KeyError
بلوک غیر را راهاندازی میکند و «کتاب پیدا نشد» را دریافت میکنیم.
Output >>> Book not found
2. نحوه مدیریت خطاهای کلیدی با استفاده از متد دیکشنری get()
روش دیگر برای کنترل کلیدهای از دست رفته بدون ایجاد استثنا، استفاده از متد دیکشنری get()
است.
شما می توانید از متد get()
روی هر شیء دیکشنری معتبر استفاده کنید. متد get()
مقدار یک کلید معین را در صورت وجود برمی گرداند – در غیر این صورت، یک مقدار پیش فرض مشخص را برمی گرداند. می توانید از آن به این صورت استفاده کنید:
value = dictionary.get(key, default_value)
در اصل، متد get()
سعی می کند مقدار کلید مشخص شده را بدست آورد :
اگر کلید وجود داشته باشد، مقدار مربوطه را برمی گرداند.
اگر کلید وجود نداشته باشد، default_value
را برمی گرداند.
بیایید اکنون از متد get()
در فرهنگ لغت کتاب استفاده کنیم. در فراخوانی متد، «Book not found» را به عنوان مقدار پیشفرض ارسال میکنیم.
books = { "1984": "George Orwell", "To Kill a Mockingbird": "Harper Lee", "The Great Gatsby": "F. Scott Fitzgerald" } # Try to get the value for "Brave New World" author = books.get("Brave New World", "Book not found") print(author)
همانطور که پیش بینی می شود، باید خروجی زیر را دریافت کنید:
Output >>> Book not found
توجه : متد get()
دیکشنری اصلی را تغییر نمی دهد. اگر همچنین میخواهید کلید گمشده را با مقدار پیشفرض اضافه کنید، میتوانید به جای آن از متد setdefault()
با syntax dictionary.setdefault(key,default_value)
استفاده کنید.
3. نحوه استفاده از defaultdict
از ماژول collections
یک راه (بسیار) پاکتر برای رسیدگی به خطاهای کلیدی، استفاده defaultdict
از ماژول collections
پایتون است. Defaultdict قابلیتهای دیکشنری داخلی پایتون را با این امکان گسترش میدهد که به شما امکان میدهد یک مقدار پیشفرض برای کلیدهایی که بهصراحت تنظیم نشدهاند، ارائه دهید.
سازنده defaultdict
یک تابع کارخانه پیش فرض را به عنوان آرگومان می گیرد. این تابع کارخانه بدون آرگومان فراخوانی می شود تا یک مقدار پیش فرض برای یک کلید غیرموجود ارائه کند.
سینتکس ایجاد یک defaultdict
به شرح زیر است:
from collections import defaultdict # Syntax defaultdict(default_factory)
بیایید یک defaultdict
از دیکشنری books
همانطور که نشان داده شده است ایجاد کنیم:
from collections import defaultdict books = { "1984": "George Orwell", "To Kill a Mockingbird": "Harper Lee", "The Great Gatsby": "F. Scott Fitzgerald" } books_default = defaultdict(lambda: "Book not found",books) # Access the key "Brave New World" author = books_default["Brave New World"] print(author)
برای تابع پیشفرض کارخانه، از یک تابع لامبدا ساده استفاده میکنیم که رشته «کتاب یافت نشد» را برمیگرداند. هر زمان که بخواهید به کلیدی دسترسی پیدا کنید که در فرهنگ لغت وجود ندارد، این تابع فراخوانی می شود.
اجرای قطعه بالا همچنین باید به شما بدهد:
Output >>> Book not found
استفاده از defaultdict
میتواند به ویژه زمانی مفید باشد که نیاز به دسترسی پویا به کلیدهای زیادی دارید.
نتیجه
و این یک بسته بندی است! امیدوارم نحوه مدیریت استثناهای KeyError در پایتون را یاد گرفته باشید. بیایید آنچه را که یاد گرفتیم مرور کنیم:
برای رسیدگی صریح به یک KeyError
، میتوانید کد دسترسی به فرهنگ لغت را با یک بلوک try
بپیچید و KeyError
در بلوک except
ببینید.
از متد get()
برای دسترسی به مقدار یک کلید استفاده کنید و در صورت نبود کلید، یک مقدار پیش فرض را برگردانید.
شما می توانید یک defaultdict
از ماژول collections
با یک تابع کارخانه که مقدار پیش فرض را برمی گرداند مقداردهی اولیه کنید.
اگر میخواهید در مورد مدیریت استثنا در پایتون بیاموزید، Python Try و Except Statements - How to Handle Exceptions in Python را بخوانید.
ارسال نظر