متن خبر

نحوه مدیریت خطاهای کلیدی در پایتون – با مثال کد

نحوه مدیریت خطاهای کلیدی در پایتون – با مثال کد

شناسهٔ خبر: 566903 -




هنگام کار با دیکشنری ها در پایتون، اغلب با استثناهای 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 را بخوانید.

خبرکاو

ارسال نظر

دیدگاه‌ها بسته شده‌اند.


تبليغات ايهنا تبليغات ايهنا

تمامی حقوق مادی و معنوی این سایت متعلق به خبرکاو است و استفاده از مطالب با ذکر منبع بلامانع است