2012-07-26 73 views
2

可能重複:
How does Python compare string and int?對整數(Python)的評估串

我作爲預期沒有評估兩個值的Python腳本。值'10'被確定爲大於200。問題是保存'10'值的變量實際上是一個字符串而不是一個整數(而200是一個整數)。

我的問題是:

過程是怎樣的評估對整數的字符串時,Python的經歷?它如何進行比較?

例如:

string="10" 
int=200 
if string >= int: 
    print("String is greater") 
else: 
    print("Int is greater") 

將輸出:

String is greater 

這是爲什麼?當我試圖比較這兩種類型時,我會認爲Python會退出時出現錯誤。

+0

當它們都是字符串,並且「10」<「200」是真的時更好,但對於錯誤的原因,這使得當你做「20」<「100」'時,不可能拋出錯誤並且真的讓你感到困惑。故事的道德:知道你的對象是什麼類型:) – geoffspear 2012-07-26 17:05:12

回答

5

Python 2.x允許比較任何類型的對象,並保證結果是可重新生成的。在Python 3.x中,比較無法有意義排序的對象會導致錯誤。 2.x行爲的基本原理是,有時可以方便地使用list.sort()異構列表。新的3.x行爲的基本原理是舊的行爲隱藏了錯誤。

Python 2.x使用的排序是一個實現細節。 CPython中使用了一些比較奇怪的規則,大致

NoneType <數<老式類,按名稱<新式的類排序,按名稱

排序(不能保證我得到這個權利,但我不打擾檢查它是一個實現細節,不依賴於它)

4

在Python 3中,當您嘗試比較字符串和int(或任何2個不可比較的類型)時,確實會得到TypeError

在Python 2中,行爲是特定於實現的;在cPython中,類型的名稱通常最終會得到比較(儘管您可能不應該依賴此...),所以字符串總是大於整數。

+0

最後一句話並不完全正確。試試'{42} - 這會導致'False',當然''dict'' <「int」'。 – 2012-07-26 16:55:30

+0

@SvenMarnach:編輯來對衝我的賭注。 :) – geoffspear 2012-07-26 16:56:46

2

the docs

運算符<,>,==,> =,< =,和!=比較兩個對象的值。這些對象不必具有相同的類型。如果兩者都是數字,則它們被轉換爲通用類型。否則,不同類型的對象總是比較不平等,並且被一致但任意地排序。