Портирование Python3: TypeError: неупорядоченные типы: dict () <int () - PullRequest
2 голосов
/ 23 декабря 2011

У меня есть этот кусок кода, который отлично работает в Python 2.7. «dist» - это словарь числа, а «min_dist» - это просто число.

for v in vertices:
    if dist[v.node_id] < min_dist:
        min_dist = dist[v.node_id]
        cur_min = v

Теперь я пытаюсь запустить его под python 3.2, и он выдаёт мне эту ошибку:

    if dist[v.node_id] < min_dist:
TypeError: unorderable types: dict() < int()

Что не так с моим кодом в Python 3.2?

Ответы [ 2 ]

10 голосов
/ 23 декабря 2011

Ваш код также "неправильный" в Python 2.Нет смысла сравнивать словарь с целым числом.Это все равно что спрашивать, больше ли число цвета, чем число, это просто не имеет смысла.

Python 2 позволяет сравнивать разные типы, подобные этому, и всегда будет говорить, что словарь больше числа, что является произвольным,Даже пустой словарь больше, чем число:

>>> import sys
>>> {} > sys.maxint
True

Такое сравнение не имеет смысла, и вместо этого в Python 3 правильно возникает ошибка, в которой говорится: «Я понятия не имею, что вы имеете в виду»,лучше и избегает ошибочных сравнений.

2 голосов
/ 23 декабря 2011

dist - это не «словарь чисел», это словарь словарей чисел Ваш код не должен работать даже в 2.x.

...