از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
نمونه str مورد انتظار، X یافت شد” در پایتون
سرفصلهای مطلب
معرفی
در پایتون، مانند هر زبان برنامه نویسی دیگری، اغلب با انواع مختلفی از خطاها مواجه می شویم. درک و رسیدگی به این خطاها، به ویژه برای مبتدیان، گاهی دشوار است. یکی از این خطاها خطای ‘Sequence item 0: expect str instance, X found’ است. هدف این مقاله بررسی این خطا، درک علت آن و بررسی چگونگی رفع آن است.
درک TypeError
اگر مدتی با پایتون کار میکنید، احتمالاً با خطایی مواجه شدهاید که چیزی شبیه به «مورد توالی 0: نمونه str مورد انتظار، X پیدا شد» را میگوید. این کاملاً رایج است، مخصوصاً هنگام کار با لیست ها و رشته ها، و درک آن در ابتدا کمی دشوار است.
من شخصاً هنگام جابجایی از زبانی مانند جاوا اسکریپت (که نوع ریختهگری ضمنی زیادی را انجام میدهد) به پایتون، که بسیار سختتر است، با این مشکل مواجه شدم.
رایجترین سناریویی که در آن این خطا رخ میدهد زمانی است که میخواهید فهرستی از رشتهها را به یک رشته با استفاده از join()
تابع، اما یک یا چند مورد در لیست رشته نیستند. مثلا:
list_of_values = (1, 2, 3)
string = ''.join(list_of_values)
این کد منجر به خطای “TypeError: sequence item 0: expect str instance, int found” می شود زیرا موارد موجود در لیست اعداد صحیح هستند نه رشته ها.
مورد دنباله 0: نمونه str مورد انتظار، فهرست پیدا شد
این خطا همچنین ممکن است زمانی رخ دهد که شما سعی می کنید به دنباله ای از لیست ها بپیوندید. به مثال زیر توجه کنید:
list_of_lists = (('Python'), ('is'), ('awesome'))
print(' '.join(list_of_lists))
این خروجی خواهد داشت:
TypeError: sequence item 0: expected str instance, list found
برای رفع این خطا، باید مطمئن شوید که رشتهها را به هم متصل میکنید. در این حالت، میتوانید از درک لیست تودرتو برای تبدیل لیستهای داخلی به رشتهها و سپس پیوستن به آنها استفاده کنید:
list_of_lists = (('Python'), ('is'), ('awesome'))
print(' '.join((' '.join(inner) for inner in list_of_lists)))
این خروجی خواهد داشت:
Python is awesome
مورد دنباله 0: نمونه str مورد انتظار، شناور پیدا شد
این خطا همچنین ممکن است زمانی رخ دهد که میخواهید به دنبالهای از شناورها بپیوندید. در اینجا یک مثال است:
floats = (1.1, 2.2, 3.3)
print(' '.join(floats))
این خروجی خواهد داشت:
TypeError: sequence item 0: expected str instance, float found
برای رفع این مشکل، باید شناورها را قبل از پیوستن به آنها به رشته تبدیل کنید:
floats = (1.1, 2.2, 3.3)
print(' '.join(map(str, floats)))
این خروجی خواهد داشت:
1.1 2.2 3.3
در این مورد، ما از map()
تابع برای اعمال str()
قبل از پیوستن به هر یک از آیتم های موجود در لیست
مورد دنباله 0: نمونه str مورد انتظار، NoneType یافت شد
این خطا زمانی رخ می دهد که شما سعی می کنید به هم متصل شوید یا بپیوندید None
با یک رشته پایتون NoneType
یک رشته نیست، از این رو خطا است. بیایید به یک مثال نگاه کنیم:
my_list = (None, 'world')
result = ''.join(my_list)
کد بالا خطای “Sequence item 0: default str instance, NoneType found” را ایجاد می کند، زیرا ما سعی می کنیم یک رشته را با None
. برای حل این مشکل، باید اطمینان حاصل کنیم که تلاشی برای الحاق نداریم None
با یک رشته
مثال زیر فیلتر می شود None
رشته های باقی مانده را ارزش گذاری می کند و به آنها می پیوندد:
my_list = (None, 'world')
result = ''.join(str(item) if item is not None else '' for item in my_list)
این مثال نتیجه را ایجاد خواهد کرد 'world'
.
مورد دنباله 0: نمونه str مورد انتظار، int پیدا شد
این خطا زمانی رخ می دهد که شما سعی می کنید یک عدد صحیح را با یک رشته الحاق کنید. در پایتون، نمیتوانید انواع دادههای مختلف را مستقیماً به هم متصل کنید. در اینجا یک مثال است:
my_list = (5, 'world')
result = ''.join(map(str, my_list))
برای حل این مشکل کافی است با استفاده از عبارت عدد صحیح را به رشته تبدیل کنید str()
تابع:
my_list = (5, 'world')
result = ''.join(map(str, my_list))
یا می توانید از درک لیست استفاده کنید:
my_list = (5, 'world')
result = ''.join((str(item) for item in my_list))
هر دوی این مثال ها عدد صحیح را تبدیل می کنند 5
به رشته '5'
قبل از پیوستن، بنابراین نتیجه خواهد بود '5world'
.
مورد دنباله 0: نمونه str مورد انتظار، تاپلی پیدا شد
این خطا زمانی رخ می دهد که می خواهید یک تاپل را با یک رشته به هم بپیوندید. تاپل ها رشته نیستند، از این رو خطا است. بیایید یک مثال را ببینیم:
my_list = ((1, 2, 3), 'world')
result = ''.join(my_list)
برای رفع این مشکل، می توانید تاپل را با استفاده از عبارت به رشته تبدیل کنید str()
تابع:
my_list = ((1, 2, 3), 'world')
result = ''.join((str(item) for item in my_list))
این منجر خواهد شد '(1, 2, 3)world'
.
مورد دنباله 0: نمونه str مورد انتظار، بایت پیدا شد
این خطا زمانی اتفاق میافتد که میخواهید بایتها را به یک رشته متصل کنید. بایت ها رشته نیستند، از این رو خطا است. در اینجا یک مثال است:
my_list = (b'Hello', 'world')
result = ''.join(my_list)
می توانید با اطمینان از اینکه تمام عناصر موجود در دنباله رشته ای هستند از خطا جلوگیری کنید. اگر می خواهید بایت ها را به یک رشته تبدیل کنید، می توانید آنها را با استفاده از رمزگشایی کنید decode
روش. در اینجا روش انجام این کار آمده است:
my_list = (b'Hello', 'world')
result = ''.join((item.decode() if isinstance(item, bytes) else item for item in my_list))
این کد بررسی می کند که آیا هر آیتم در لیست یک شی بایت است یا خیر و در صورت وجود آن را رمزگشایی می کند. نتیجه این کد خواهد بود 'Helloworld'
.
توجه داشته باشید: به یاد داشته باشید، پایتون انتظار دارد همه موارد موجود در لیست به عنوان رشته در هنگام استفاده از join()
عملکرد آن به عنوان یک زبان قوی تایپ شده است و به طور ضمنی یک نوع داده را به دیگری تبدیل نمی کند. اگر هر مورد یک رشته نیست، شما خطای “Sequence item 0: expect str instance, X found” را دریافت خواهید کرد.
نتیجه
درک و حل کردن خطای Python “Sequence item 0: expect str instance, X found” به این معناست که join()
تابع انتظار دارد که تمام موارد موجود در یک لیست رشته ای باشند. با اطمینان از اینکه با لیست رشته ها کار می کنید، می توانید از این خطا جلوگیری کنید و با موفقیت لیست خود را به یک رشته بپیوندید.
(برچسبها به ترجمه)# python
منتشر شده در 1402-12-30 09:42:05