TypeError:unorderable类型:str()<int()

j_x*_* li 4 python scikit-learn

我使用的是python 3.5,所有软件包都是以下版本

numpy-1.12.0b1+mkl-cp35-cp35m-win_amd64

scikit_learn-0.18.1-cp35-cp35m-win_amd64

scipy-0.18.1-cp35-cp35m-win_amd64
Run Code Online (Sandbox Code Playgroud)

我用的是windows os.

当我使用scikit_learn时,我得到以下消息,

Traceback (most recent call last):
  File "F:/liyulin/tf_idf2.py", line 7, in <module>
    from sklearn import feature_extraction  # sklearn??????????
  File "C:\Users\lijia_xin\AppData\Local\Programs\Python\Python35\lib\site-packages\sklearn\__init__.py", line 57, in <module>
    from .base import clone
  File "C:\Users\lijia_xin\AppData\Local\Programs\Python\Python35\lib\site-packages\sklearn\base.py", line 12, in <module>
    from .utils.fixes import signature
  File "C:\Users\lijia_xin\AppData\Local\Programs\Python\Python35\lib\site-packages\sklearn\utils\__init__.py", line 11, in <module>
    from .validation import (as_float_array,
  File "C:\Users\lijia_xin\AppData\Local\Programs\Python\Python35\lib\site-packages\sklearn\utils\validation.py", line 18, in <module>
    from ..utils.fixes import signature
  File "C:\Users\lijia_xin\AppData\Local\Programs\Python\Python35\lib\site-packages\sklearn\utils\fixes.py", line 406, in <module>
    if np_version < (1, 12, 0):
TypeError: unorderable types: str() < int()
Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

这是我第一次提问

请帮助解决它.

DSM*_*DSM 13

你的numpy版本是numpy-1.12.0b1.那个"b1"导致了这个问题.如果你看看sklearn/utils/fixes.py,你会看到有一个parse_version函数试图让所有内容:

def _parse_version(version_string):
    version = []
    for x in version_string.split('.'):
        try:
            version.append(int(x))
        except ValueError:
            # x may be of the form dev-1ea1592
            version.append(x)
    return tuple(version)

np_version = _parse_version(np.__version__)
Run Code Online (Sandbox Code Playgroud)

但在"0b1"的情况下,我们将采用ValueError路径.所以这一行

 if np_version < (1, 12, 0):
Run Code Online (Sandbox Code Playgroud)

比较

>>> (1, 12, '0b1') < (1, 12, 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() < int()
Run Code Online (Sandbox Code Playgroud)

哪个不行.虽然这肯定是他们的错误,但最简单的解决方案是更改你的numpy版本(例如,通过切换回1.11.2).但是如果你想保留当前版本的numpy,你可以fixes.py手动编辑来改变

if np_version < (1, 12, 0):
Run Code Online (Sandbox Code Playgroud)

if np_version < (1, 12):
Run Code Online (Sandbox Code Playgroud)

所以它不会尝试比较0"0b1",但将返回False代替.