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

سرور مجازی NVMe

مقایسه انواع ناسازگار در پایتون

0 2
زمان لازم برای مطالعه: 10 دقیقه


معرفی

در پایتون اغلب هنگام نوشتن یا اجرای یک اسکریپت با خطاها و استثناهای مختلفی مواجه می شویم. یک خطای بسیار رایج، به خصوص برای مبتدیان، این است TypeError: '<' not supported between instances of str and int، یا یک نوع دیگر این خطا زمانی رخ می دهد که بخواهیم عملیاتی را بین دو نوع ناسازگار انجام دهیم.

در این مقاله، معنای این خطا، چرایی وقوع آن و روش رفع آن را بررسی خواهیم کرد.

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

مقایسه نوع ناسازگار

پایتون یک زبان تایپ پویا است، به این معنی که مفسر نوع یک شی را در زمان اجرا تعیین می کند. این انعطاف‌پذیری به ما امکان می‌دهد به سرعت کد بنویسیم، اما اگر مراقب نباشیم می‌تواند منجر به انواع خاصی از خطاها شود.

یکی از آن خطاها این است TypeError: '<' not supported between instances of str and int. این زمانی اتفاق می افتد که ما سعی می کنیم یک رشته و یک عدد صحیح را با استفاده از کمتر از ((<) اپراتور. پایتون نمی داند چگونه این دو نوع شی مختلف را با هم مقایسه کند، بنابراین a را بالا می برد TypeError.

توجه داشته باشید: خطا می تواند شامل هر عملگر مقایسه ای باشد، نه فقط کمتر از (<) اپراتور. برای مثال، ممکن است خطای مشابهی را با the مشاهده کنید > اپراتور (بیشتر از)

اگر از زبانی مانند جاوا اسکریپت به پایتون می آیید، ممکن است کمی به آن عادت کنید. JS تبدیل را برای شما انجام می دهد، بدون نیاز به نوع ریخته گری صریح (یعنی تبدیل "2" به عدد صحیح 2). حتی با خوشحالی انواع مختلفی را که منطقی نیستند مقایسه می کند (به عنوان مثال "rasanegar" > 42). بنابراین در پایتون باید به یاد داشته باشید که انواع داده های خود را تبدیل کنید.

مقایسه رشته و عدد صحیح

برای نشان دادن این خطا، بیایید سعی کنیم یک رشته و یک عدد صحیح را با هم مقایسه کنیم:

print("3" < 2)

وقتی این کد را اجرا می کنید، پایتون یک خطا ایجاد می کند:

TypeError: '<' not supported between instances of 'str' and 'int'

این خطا بیان می کند که پایتون نمی داند چگونه یک رشته (“3”) و یک عدد صحیح (2) را مقایسه کند. اینها اساساً انواع مختلفی از اشیاء هستند و پایتون روشی داخلی برای تعیین اینکه کدام یک از دیگری “کمتر” است، ندارد.

رفع TypeError با تبدیل رشته به عدد صحیح

یکی از راه‌های حل این خطا، اطمینان از اینکه هر دو شی مورد مقایسه از یک نوع هستند، است. اگر یک رشته و یک عدد صحیح را با هم مقایسه کنیم، می توانیم رشته را با استفاده از عدد صحیح به عدد صحیح تبدیل کنیم. int() تابع:

print(int("3") < 2)

حالا وقتی این کد را اجرا می کنید، پایتون خروجی می دهد:

False

با تبدیل رشته “3” به یک عدد صحیح، این امکان را برای پایتون فراهم کرده ایم که این دو شی را با هم مقایسه کند. از آنجایی که 3 کمتر از 2 نیست، پایتون به درستی خروجی می دهد False.

تابع ورودی و نوع بازگشت رشته آن

در پایتون، input() تابع برای گرفتن ورودی کاربر استفاده می شود. داده های وارد شده توسط کاربر همیشه به صورت رشته ای برگردانده می شود، حتی اگر کاربر عددی را وارد کند. بیایید یک مثال را ببینیم:

user_input = input("Enter a number: ")
print(type(user_input))

اگر این کد را اجرا کنید و وارد کنید 123، خروجی خواهد بود:

<class 'str'>

این نشان می دهد که input() تابع ورودی کاربر را به عنوان یک رشته و نه یک عدد صحیح برمی گرداند. این می تواند منجر شود TypeError اگر سعی کنید از ورودی در عملیات مقایسه با یک عدد صحیح استفاده کنید.

مقایسه اعداد صحیح و رشته ها با توابع Min() و Max().

این min() و max() توابع در پایتون به ترتیب برای یافتن کوچکترین و بزرگترین عناصر در یک مجموعه استفاده می شوند. اگر سعی کنید از این توابع استفاده کنید روی مجموعه ای که شامل رشته ها و اعداد صحیح است، با a مواجه خواهید شد TypeError. این به این دلیل است که پایتون نمی تواند این دو نوع مختلف داده را با هم مقایسه کند.

در اینجا یک مثال است:

values = (10, '20', 30)
print(min(values))

باز هم، این باعث افزایش می شود TypeError: '<' not supported between instances of 'str' and 'int' زیرا پایتون نمی داند چگونه یک رشته را با یک عدد صحیح مقایسه کند.

شناسایی انواع متغیرهای ذخیره شده

برای جلوگیری TypeError مهم است که نوع داده های ذخیره شده در متغیرهای خود را درک کنید. می توانید استفاده کنید type() تابعی برای شناسایی نوع داده یک متغیر. در اینجا یک مثال است:

value = '10'
print(type(value))

با اجرای این کد خروجی:

<class 'str'>

این نشان می دهد که متغیر value شامل یک رشته دانستن نوع داده متغیرهای خود می تواند به شما در اجتناب از آن کمک کند TypeError هنگام انجام عملیاتی که به انواع داده های خاصی نیاز دارد، مشکلاتی را ایجاد می کند.

پیشنهاد می‌کنیم بخوانید:  چگونه یک مدل هوش مصنوعی کوانتومی برای پیش بینی داده های گل زنبق با پایتون بسازیم

مقایسه لیست و عدد صحیح

اگر بخواهید مستقیماً یک لیست و یک عدد صحیح را مقایسه کنید، پایتون a را افزایش می دهد TypeError. پایتون نمی تواند این دو نوع مختلف داده را با هم مقایسه کند. به عنوان مثال، کد زیر یک خطا ایجاد می کند:

numbers = (1, 2, 3)
if numbers > 2:
    print("The list is greater than 2.")

وقتی این کد را اجرا کنید، دریافت خواهید کرد TypeError: '>' not supported between instances of 'list' and 'int'. برای مقایسه یک عدد صحیح با عناصر موجود در یک لیست، باید روی لیست تکرار کنید و هر عنصر را جداگانه مقایسه کنید.

دسترسی به مقادیر فهرست برای مقایسه

در پایتون، ما اغلب برای مقایسه نیاز به دسترسی به عناصر جداگانه در یک لیست داریم. این کار با استفاده از شاخص ها انجام می شود. شاخص یک لیست برای اولین عنصر از 0 شروع می شود و برای هر عنصر بعدی یک عدد افزایش می یابد. در اینجا یک مثال است:

my_list = ('apple', 2, 'orange', 4, 'grape', 6)
print(my_list(1))  

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

اطمینان از سازگاری ارزش برای مقایسه

اطمینان از سازگاری مقادیری که مقایسه می کنید ضروری است. در پایتون نمی توانید مستقیماً یک رشته را با یک عدد صحیح مقایسه کنید. انجام این کار باعث افزایش یک TypeError. اگر از انواع مقادیری که با آن‌ها سر و کار دارید مطمئن نیستید، بهتر است قبل از مقایسه آنها را به یک نوع معمولی تبدیل کنید. به عنوان مثال، برای مقایسه یک رشته و یک عدد صحیح، می توانید عدد صحیح را به یک رشته تبدیل کنید:

str_num = '5'
int_num = 10
comparison = str_num < str(int_num)  
print(comparison)  

توجه داشته باشید: هنگام تبدیل انواع برای مقایسه محتاط باشید. تبدیل یک عدد صحیح به یک رشته برای مقایسه می تواند منجر به نتایج غیرمنتظره شود. برای مثال، «10» در مقایسه رشته‌ها کمتر از «2» در نظر گرفته می‌شود، زیرا این مقایسه مبتنی است روی مقدار ASCII، نه مقدار عددی.

فیلتر کردن اعداد صحیح در لیست برای مقایسه

در یک لیست با انواع مختلف، ممکن است بخواهید اعداد صحیح را برای مقایسه فیلتر کنید. شما می توانید این کار را با استفاده از درک لیست و isinstance() تابع، که بررسی می کند آیا یک مقدار نمونه ای از یک نوع خاص است یا خیر:

my_list = ('apple', 2, 'orange', 4, 'grape', 6)
integers = (i for i in my_list if isinstance(i, int))
print(integers)  

اکنون، می توانید با خیال راحت اعداد صحیح موجود در لیست را بدون نگرانی از دریافت خطا مقایسه کنید!

مقایسه طول لیست با یک عدد صحیح

یکی دیگر از عملیات رایج در پایتون، مقایسه طول یک لیست با یک عدد صحیح است. این کار با استفاده از len() تابع، که تعداد آیتم های یک لیست را برمی گرداند. در اینجا یک مثال است:

my_list = ('apple', 2, 'orange', 4, 'grape', 6)
list_length = len(my_list)
print(list_length > 5)  

در این مورد، طول لیست (6) را با عدد صحیح 5 مقایسه می کنیم. از آنجایی که 6 بزرگتر از 5 است، خروجی True. خیر TypeError در اینجا مطرح می شود زیرا ما دو عدد صحیح را با هم مقایسه می کنیم.

مقایسه جمع آیتم های فهرست با یک عدد صحیح

در پایتون، می توانید موارد را در یک لیست با استفاده از داخلی جمع کنید sum() تابع. این تابع مجموع همه موارد را در صورتی که اعداد صحیح یا شناور باشند برمی گرداند. اگر می خواهید این مجموع را با یک عدد صحیح مقایسه کنید، می توانید بدون هیچ مشکلی این کار را انجام دهید. در اینجا یک مثال است:

list_numbers = (1, 2, 3, 4, 5)
sum_of_list = sum(list_numbers)
print(sum_of_list > 10)  

در این مثال، sum_of_list مجموع همه اقلام در است list_numbers. سپس این مجموع را با عدد صحیح 10 مقایسه می کنیم.

مقایسه شناور و رشته

وقتی می خواهید یک float و یک رشته را در پایتون مقایسه کنید، با خطا مواجه می شوید. این به این دلیل است که پایتون نمی داند چگونه این دو نوع مختلف را مقایسه کند. در اینجا یک مثال است:

print(3.14 < "5")  

در این مثال، پایتون a را پرتاب می کند TypeError زیرا نمی داند چگونه یک شناور (3.14) را با یک رشته (“5”) مقایسه کند.

حل TypeError با تبدیل رشته به شناور

برای حل این مشکل می توانید رشته را با استفاده از عبارت به شناور تبدیل کنید float() تابع. این تابع یک رشته یا یک عدد می گیرد و یک عدد ممیز شناور برمی گرداند. در اینجا روش استفاده از آن آورده شده است:

print(3.14 < float("5"))  

در این مثال، رشته “5” را با استفاده از عبارت به یک شناور تبدیل می کنیم float() تابع. سپس این شناور را با شناور 3.14 مقایسه می کنیم. از آنجایی که پایتون اکنون می داند که چگونه این دو شناور را مقایسه کند، a را پرتاب نمی کند TypeError.

توجه داشته باشید: این float() تابع فقط می تواند رشته هایی را تبدیل کند که یک عدد را نشان می دهند. اگر بخواهید رشته‌ای را تبدیل کنید که یک عدد را نشان نمی‌دهد (مانند “hello”)، پایتون یک ValueError پرتاب می‌کند.

مدیریت TypeError در پانداها

Pandas یک کتابخانه قدرتمند تجزیه و تحلیل داده در پایتون است که ساختارهای داده انعطاف پذیری را ارائه می دهد. با این حال، ممکن است با یک TypeError وقتی سعی می کنید انواع مختلف را در یک Pandas DataFrame مقایسه کنید.

برای رسیدگی به این خطا، می توانید از apply() تابع برای اعمال یک تابع به هر عنصر در یک ستون DataFrame. از این تابع می توان برای تبدیل عناصر به نوع صحیح استفاده کرد. در اینجا یک مثال است:

import pandas as pd

df = pd.DataFrame({
    'A': (1, 2, 3),
    'B': ('4', '5', '6')
})

df('B') = df('B').apply(float)
print(df('A') < df('B'))  
                           
                           
                           

در این مثال از apply() تابع تبدیل عناصر ستون ‘B’ به شناور. سپس عناصر ستون ‘A’ را با عناصر ستون ‘B’ مقایسه می کنیم. از آنجایی که همه عناصر اکنون شناور هستند، پایتون a را پرتاب نمی کند TypeError.

مقایسه شناورها و رشته ها با توابع Min() و Max().

در پایتون، min() و max() توابع به ترتیب برای یافتن کوچکترین و بزرگترین عناصر در یک تکرار شونده استفاده می شوند. با این حال، این توابع می تواند پرتاب کند TypeError اگر سعی کنید یک شناور و یک رشته را مقایسه کنید.

پیشنهاد می‌کنیم بخوانید:  یک فایل را خط به خط در پایتون بخوانید

در اینجا یک مثال است:

print(min(3.14, 'pi'))

این کد باعث a TypeError، زیرا پایتون نمی تواند یک شناور و یک رشته را مقایسه کند. پیام خطا این خواهد بود: TypeError: '<' not supported between instances of 'str' and 'float'.

برای حل این مشکل، می توانید قبل از مقایسه، float را به یک رشته تبدیل کنید:

print(min(str(3.14), 'pi'))

این خروجی خواهد شد '3.14'، زیرا به ترتیب حروف الفبا “کوچکترین” است.

مقایسه تاپل و عدد صحیح

تاپل یک دنباله تغییر ناپذیر از اشیاء پایتون است. اگر سعی کنید یک تاپل را با یک عدد صحیح مقایسه کنید، پایتون a را پرتاب می کند TypeError. در اینجا یک مثال است:

print((1, 2, 3) < 4)

این کد باعث a TypeError با پیام: TypeError: '<' not supported between instances of 'tuple' and 'int' از آنجایی که نمی داند چگونه یک عدد را با مجموعه ای از اعداد مقایسه کند.

دسترسی به مقادیر تاپل برای مقایسه

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

my_tuple = (1, 2, 3)
print(my_tuple(0) < 4)

این خروجی خواهد شد True، زیرا اولین عنصر تاپل (1) کمتر از 4 است.

فیلتر کردن یک تاپل برای مقایسه

اگر می‌خواهید همه مقادیر یک تاپل را با یک عدد صحیح مقایسه کنید، می‌توانید از طریق حلقه حلقه بزنید و هر مقدار را جداگانه مقایسه کنید. در اینجا یک مثال است:

my_tuple = (1, 2, 3)
for i in my_tuple:
    print(i < 4)

این خروجی خواهد شد True سه بار، زیرا همه عناصر در تاپل کمتر از 4 هستند.

توجه داشته باشید: پایتون filter() تابع همچنین می تواند برای فیلتر کردن یک تاپلی استفاده شود روی مقایسه با یک عدد صحیح این تابع یک تکرار کننده از عناصر تاپلی که تابع true برمی گرداند می سازد.

در اینجا مثالی از روش استفاده از آن آورده شده است filter() عملکرد فیلتر کردن یک تاپل:

my_tuple = (1, 2, 3)
filtered_tuple = filter(lambda i: i < 4, my_tuple)
print(tuple(filtered_tuple))

این خروجی خواهد شد (1, 2, 3)، زیرا همه عناصر در تاپل کمتر از 4 هستند.

مقایسه طول تاپل با یک عدد صحیح

در پایتون، ما اغلب نیاز داریم که طول یک تاپل را با یک عدد صحیح مقایسه کنیم. این ساده است و می توان با استفاده از len() تابع، که تعداد آیتم های یک شی را برمی گرداند. در اینجا روش انجام این کار آمده است:

my_tuple = ('apple', 'banana', 'cherry', 'dates')
length = len(my_tuple)

if length < 5:
    print('The tuple has less than 5 items.')
else:
    print('The tuple has 5 or more items.')

در مثال بالا، طول my_tuple 4 است، بنابراین خروجی این خواهد بود که “تاپ کمتر از 5 آیتم دارد.”

آشنایی با ساخت تاپل در پایتون

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

می توانید با قرار دادن دنباله ای از آیتم های جدا شده با کاما در داخل پرانتز یک تاپل ایجاد کنید (). در اینجا یک مثال است:

my_tuple = ('apple', 'banana', 'cherry', 'dates')
print(my_tuple)

در مثال بالا، my_tuple یک تاپل شامل چهار مورد است.

توجه داشته باشید: تاپلی که فقط یک آیتم داشته باشد، تاپل تک تنی نامیده می شود. شما باید یک کاما انتهایی را بعد از آیتم قرار دهید تا یک تاپل تک تنی را تعریف کنید. مثلا، my_tuple = ('apple',) یک تاپلی تک قلو است.

مقایسه مجموع اقلام چند تایی با یک عدد صحیح

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

در اینجا یک مثال است:

my_tuple = (1, 2, 3, 4)
total = sum(my_tuple)

if total < 10:
    print('The sum of tuple items is less than 10.')
else:
    print('The sum of tuple items is 10 or more.')

در مثال بالا، مجموع my_tuple آیتم ها 10 است، بنابراین خروجی “مجموع آیتم های چندتایی 10 یا بیشتر است.”

مقایسه یک روش و یک عدد صحیح

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

در اینجا یک مثال است:

class MyClass:
    def my_method(self):
        return 5

my_object = MyClass()

if my_object.my_method() < 10:
    print('The return value of the method is less than 10.')
else:
    print('The return value of the method is 10 or more.')

در مثال بالا، my_method() روش از my_object 5 را برمی گرداند، بنابراین خروجی “مقدار بازگشتی روش کمتر از 10 است.”

حل TypeError با فراخوانی متد

در پایتون، متدها نیز اشیا هستند. هنگام مقایسه یک متد و یک عدد صحیح قطعا با خطا مواجه خواهید شد. این به این دلیل است که پایتون نمی داند چگونه این دو نوع شی مختلف را با هم مقایسه کند. مقایسه یک روش با یک عدد صحیح منطقی نیست. بیایید به یک مثال نگاه کنیم:

def my_method():
    return 5

print(my_method < 10)

خروجی:

TypeError: '<' not supported between instances of 'function' and 'int'

برای حل این مشکل، ما نیاز داریم روش را فراخوانی کنید به جای مقایسه خود روش با یک عدد صحیح. به یاد داشته باشید که یک متد برای اجرای تابع و برگرداندن یک مقدار باید فراخوانی شود. ما می توانیم این کار را با اضافه کردن پرانتز انجام دهیم () بعد از نام روش:

def my_method():
    return 5

print(my_method() < 10)

خروجی:

True

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

نتیجه

در پایتون، پیام خطای «TypeError: «<» بین نمونه‌های «str» و «int» پشتیبانی نمی‌شود» یک خطای رایج است که هنگام مقایسه انواع ناسازگار رخ می‌دهد.

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

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



منتشر شده در 1402-12-29 13:51:03

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

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

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