وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

x not in list” خطا در پایتون

0 19
زمان لازم برای مطالعه: 5 دقیقه


معرفی

در پایتون یا هر زبان سطح بالا، معمولاً باید موارد را از فهرست/آرایه حذف کنیم. با این حال، ممکن است گاهی اوقات با خطای مشابه مواجه شوید ValueError: list.remove(x): x not in list. این خطا زمانی رخ می دهد که می خواهید یک مورد را از لیستی که در واقع وجود ندارد حذف کنید.

در این بایت، به این می پردازیم که چرا این خطا رخ می دهد و چگونه می توانید آن را مدیریت کنید.

درک خطا

این remove() تابع در پایتون برای حذف اولین رخداد یک مقدار از یک لیست استفاده می شود. با این حال، اگر مقداری که می‌خواهید حذف کنید در لیست وجود نداشته باشد، پایتون a را افزایش می‌دهد ValueError.

fruits = ('apple', 'banana', 'cherry')
fruits.remove('orange')

این خروجی خواهد داشت: ValueError: list.remove(x): x not in list.

بررسی وجود عنصر قبل از حذف

یکی از راه های جلوگیری از ValueError این است که قبل از تلاش برای حذف آن، بررسی کنید که آیا مورد در لیست وجود دارد یا خیر. این را می توان با استفاده از in کلمه کلیدی.

fruits = ('apple', 'banana', 'cherry')
if 'orange' in fruits:
    fruits.remove('orange')

در این مورد، “نارنجی” در لیست نیست، بنابراین remove() تابع فراخوانی نمی شود و بنابراین هیچ خطایی ایجاد نمی شود.

سعی کنید/به جز مدیریت خطا

راه دیگر برای رسیدگی به این خطا استفاده از a است try/except مسدود کردن. این به شما این امکان را می دهد که سعی کنید آیتم را حذف کنید و اگر وجود نداشت، پایتون کد را در except به جای مطرح کردن خطا، مسدود کنید.

fruits = ('apple', 'banana', 'cherry')
try:
    fruits.remove('orange')
except ValueError:
    print('Item not found in list')

در این مورد، چون «نارنجی» در لیست نیست، پایتون به جای بالا بردن علامت «Item not found in list» را چاپ می کند. ValueError.

تفاوت این روش با روش قبلی نشان داده شده در واقع در مورد ترجیح شخصی و خوانایی است. هر دو کاملاً خوب کار می کنند، بنابراین یکی را که بیشتر ترجیح می دهید انتخاب کنید.

حذف چند مورد

وقتی نوبت به حذف چندین مورد از یک لیست می رسد، ممکن است همه چیز کمی پیچیده تر شود. اگر سعی کنید چندین مورد را در یک حلقه حذف کنید و یکی از آنها وجود نداشته باشد، a ValueError مطرح خواهد شد.

fruits = ('apple', 'banana', 'cherry')
items_to_remove = ('banana', 'orange')
for item in items_to_remove:
    fruits.remove(item)

این خروجی خواهد داشت: ValueError: list.remove(x): x not in list.

برای انجام این کار، می توانید تکنیک های قبلی را که قبلا نشان داده ایم ترکیب کنید. می توانید از a استفاده کنید try/except داخل حلقه را مسدود کنید و قبل از تلاش برای حذف آن، بررسی کنید که آیا آیتم وجود دارد یا خیر.

fruits = ('apple', 'banana', 'cherry')
items_to_remove = ('banana', 'orange')
for item in items_to_remove:
    if item in fruits:
        try:
            fruits.remove(item)
        except ValueError:
            print(f'Error removing {item} from list')

در این حالت، پایتون «موز» را از لیست حذف می‌کند و زمانی که می‌خواهد «نارنجی» را حذف کند و موفق نمی‌شود، به جای بالا بردن یک علامت، «خطا در حذف نارنجی از فهرست» را چاپ می‌کند. ValueError.

استفاده از لیست درک

به جای حذف صریح مورد با list.remove(x)، می توانید از درک لیست برای ایجاد a استفاده کنید لیست جدید که عنصری را که می خواهید حذف کنید مستثنی می کند. این می تواند روش کارآمدتری برای مدیریت حذف یک مورد از یک لیست باشد. در اینجا یک مثال است:

my_list = (1, 2, 3, 4, 5)
x = 3
my_list = (i for i in my_list if i != x)
print(my_list)

این خروجی خواهد داشت:

(1, 2, 4, 5)

در این کد، ما یک لیست جدید ایجاد می کنیم که شامل تمام موارد از my_list بجز x.

مشکل اصلی من با این روش این است که خیلی واضح نیست که شما با نگاه کردن به کد می خواهید به چه چیزی برسید، که می تواند برای همکاران (یا حتی خود آینده شما) گیج کننده باشد.

پیشنهاد می‌کنیم بخوانید:  راهنمای تفریق ماتریس NumPy

مدیریت لیست های تودرتو

هنگام برخورد با لیست های تودرتو، list.remove(x) متد فقط می تواند کل زیر لیست را حذف کند، نه یک عنصر خاص در فهرست فرعی. اگر بخواهید عنصر خاصی را در فهرست فرعی حذف کنید، با آن مواجه خواهید شد ValueError: list.remove(x): x not in list خطا

مثلا:

my_list = ((1, 2), (3, 4))
x = 2
my_list.remove(x)

این یک را افزایش می دهد ValueError زیرا x یک عنصر در نیست my_list، این یک عنصر در یک فهرست فرعی از است my_list.

نوع مقدار صحیح را تأیید کنید

مهم است که مطمئن شوید مقداری که می‌خواهید از لیست حذف کنید از نوع صحیح باشد. اگر اینطور نیست، با آن مواجه خواهید شد ValueError خطا برای مثال، تلاش برای حذف یک رشته از لیست اعداد صحیح، این خطا را ایجاد می کند.

my_list = (1, 2, 3, 4, 5)
x = '2'
my_list.remove(x)

این موضوعی است که به راحتی قابل چشم پوشی است. به عنوان مثال، وقتی از یک کاربر ورودی می گیرید، همه چیز به صورت یک رشته وارد می شود و ممکن است فراموش کنید که تبدیل کنید. '2' به عدد صحیح 2.

ValueError با فهرست مطالب() روش

این index() روش در پایتون می تواند برای یافتن شاخص یک عنصر خاص در یک لیست استفاده شود. با این حال، اگر عنصر در لیست نباشد، آن را دریافت خواهید کرد ValueError.

مثلا:

my_list = (1, 2, 3, 4, 5)
x = 6
print(my_list.index(x))

این یک را افزایش می دهد ValueError زیرا x در نیست my_list.

باز هم برای اجتناب از ValueError هنگام استفاده از index() روش، می توانید همان روش های بالا را دنبال کنید و ابتدا بررسی کنید که آیا عنصر در لیست است یا خیر. اگر اینطور است، می توانید شاخص آن را پیدا کنید.

my_list = (1, 2, 3, 4, 5)
x = 6
if x in my_list:
    print(my_list.index(x))
else:
    print(f"{x} is not in the list.")

در این حالت، خروجی “6 در لیست نیست” خواهد بود. به جای الف ValueError.

مدیریت خطای یک لاینر If/Else

در پایتون، ما این قابلیت را داریم که خطاها را در یک خط کد با استفاده از دستور if/else مدیریت کنیم. این به ویژه هنگام برخورد با این نوع استثناها مفید است. در اینجا روش انجام آن آمده است:

my_list = ('apple', 'banana', 'cherry')
value_to_remove = 'banana'

my_list.remove(value_to_remove) if value_to_remove in my_list else None

مزیت اینجا این است که کد فشرده تر است و خطوط زیادی را اشغال نمی کند.

پیشنهاد می‌کنیم بخوانید:  روش استفاده از متغیرهای سراسری و غیر محلی در پایتون

اعمال کردن فهرست مطالب() روش درست

سناریوی رایج دیگری که ممکن است با آن روبرو شوید ValueError: x not in list زمانی است که شما از index() روش. این index() متد شاخص عنصر مشخص شده در لیست را برمی گرداند. اما اگر عنصر در لیست نباشد، خطا را افزایش می دهد.

در اینجا روش اعمال آن آمده است index() روش صحیح:

my_list = ('apple', 'banana', 'cherry')
value_to_search = 'banana'

try:
    index_value = my_list.index(value_to_search)
    print(f'Value found at index: {index_value}')
except ValueError:
    print('Value not in list')

در این مثال، ما از یک بلوک try/except برای گرفتن آن استفاده می کنیم ValueError اگر مقدار در لیست یافت نشد. اگر مقدار پیدا شد، نمایه مقدار چاپ می شود.

توجه داشته باشید: یادت باشد index() متد فقط اولین رخداد مقدار را در لیست برمی گرداند. اگر نیاز به یافتن همه رخدادها دارید، باید از روش دیگری استفاده کنید.

نتیجه

پایتون راه‌های مختلفی را برای مدیریت آن ارائه می‌کند ValueError: list.remove(x): x not in list استثنا. با تأیید وجود عنصر قبل از حذف، استفاده از بلوک‌های try/except یا استفاده از دستور if/else تک خطی، می‌توانید تأیید کنید که کد شما بدون مشکل اجرا می‌شود. علاوه بر این، با استفاده از index() روش صحیح، شما می توانید اجتناب کنید ValueError هنگام جستجوی یک عنصر خاص در یک لیست.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1402-12-30 00:42:04

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید