از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش مدیریت خطاهای کلیدی در پایتون – با مثال کد
سرفصلهای مطلب
هنگام کار با دیکشنری ها در پایتون، اغلب با آن برخورد می کنید KeyError
استثناها.
دیکشنری ها ساختار داده های داخلی جفت های ارزش کلیدی هستند. بنابراین می توانید با استفاده از کلید مربوطه مانند زیر، یک مقدار را در زمان ثابت جستجو کنید: dict[key]
برمی گرداند value
. اما اگر کلید در فرهنگ لغت وجود نداشته باشد چه؟ خوب، آن زمانی است که شما یک KeyError
در پایتون
چند راه مختلف وجود دارد که می توانید با چنین مواردی کنار بیایید KeyError
استثناها. می توانید آنها را به صراحت مدیریت کنید یا از روش های فرهنگ لغت خاصی برای تنظیم مقادیر پیش فرض برای کلیدهای از دست رفته استفاده کنید. و در این آموزش با کدنویسی یک مثال ساده به روش های زیر نگاه خواهیم کرد:
- استفاده کردن
try-except
بلوک ها - با استفاده از روش دیکشنری
get()
- استفاده کردن
defaultdict
ازcollections
مدول
بیا شروع کنیم.
1. روش رسیدگی به استثنائات KeyError با try-except
بلوک ها
بیایید با مرور زمان وقوع خطاهای کلیدی و اینکه چگونه میتوانیم با استفاده از این استثنائات مدیریت کنیم، شروع کنیم try-except
بلوک ها
چه زمانی یک خطای کلیدی رخ می دهد؟
در پایتون، a 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
بلوک هایی مانند این:
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()
روش در عوض با نحو dictionary.setdefault(key,default_value)
.
3. روش استفاده defaultdict
از collections
مدول
یک راه (بسیار) تمیزتر برای رسیدگی به خطاهای کلیدی استفاده از آن است defaultdict
از پایتون collections
مدول. Defaultdict قابلیتهای فرهنگ لغت داخلی پایتون را با این امکان گسترش میدهد که به شما امکان میدهد یک مقدار پیشفرض برای کلیدهایی که بهصراحت تنظیم نشدهاند، ارائه دهید.
را defaultdict
سازنده یک تابع کارخانه پیش فرض را به عنوان آرگومان می گیرد. این تابع کارخانه نامیده می شود بدون آرگومان هایی برای ارائه یک مقدار پیش فرض برای یک کلید غیر موجود.
نحو برای ایجاد a 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()
روشی برای دسترسی به مقدار یک کلید، با گزینه ای برای برگرداندن یک مقدار پیش فرض در صورت عدم وجود کلید. - می توانید a را مقداردهی اولیه کنید
defaultdict
ازcollections
ماژول با یک تابع کارخانه که مقدار پیش فرض را برمی گرداند.
اگر می خواهید در مورد مدیریت استثنا در پایتون بیاموزید، Python Try and Except Statements – How to Handle Exceptions in Python را بخوانید.
منتشر شده در 1403-06-18 01:35:18