2011-12-23 3 views
2

파이썬 2.7에서 잘 작동하는이 코드 조각을 가지고 있습니다. "dist"는 숫자의 사전이고 "min_dist"는 숫자입니다. Python3 포팅 : TypeError : unorderable types : dict() <int()

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

는 지금은 파이썬 3.2에서 실행하려고 그것은 나에게이 오류 제공 :

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

파이썬 3.2에서 내 코드에 어떤 문제가 있습니까?

+0

dist [v.node_id]가 사전 인 경우, if dist [v.node_id]

+0

아,이 코드 부분이 실행되지만 dist (v. node_id)를 {}로 초기화하여 문제를 초기화하는 코드가 있습니다. 코드의 다른 모든 부분은 숫자로 초기화를 올바르게 수행합니다. – Hery

+0

똑같은 버그가 정확히 같은 방식으로 나타 났으므로 혼자가 아니므로 ;-) 이것을 보니 빠르게 수정 될 수있었습니다! – tdc

답변

2

dist은 "숫자 사전"이 아니며 사전의 개의 사전입니다. 2.x에서도 코드가 작동하지 않아야합니다.

+1

예, 제 코드는 python 2.7에서 작동합니다. 나는 그것을 다시 확인했다. – Hery

+1

그런 다음 다른 곳으로 이식했습니다. –

+0

당신 말이 맞아요. 나는 다른 곳에서 엉망이되었다. 코드는 Lennart가 설명한 이유 때문에 2.7에서 여전히 "작동"합니다. – Hery

10

파이썬 2에서도 코드가 "잘못"되었습니다. 사전을 정수와 비교하는 것은 의미가 없습니다. 색깔이 숫자보다 큰지 묻는 것과 같아서, 그것은 단지 의미가 없습니다.

파이썬 2는 이와 같이 다른 유형의 비교를 허용하며, 사전은 숫자보다 크다고 항상 말할 것입니다. 이는 임의적입니다. 심지어 빈 사전은 숫자보다 큰 :

비교 파이썬 3 대신에 제대로 훨씬 더있다, "나는 당신이 무슨 뜻인지 몰라"라고 제기 및 오류 사실상 의미이며,
>>> import sys 
>>> {} > sys.maxint 
True 

이러한 오해의 비교를 피한다.

+0

감사합니다. 당신의 설명이 문제의 원인을 찾는데 도움이되었습니다. – Hery

관련 문제