Python2 와 Python3의 차이점과 range() 에러 해결 방법
안녕하세요 코스모스팜 입니다.
파이썬2 라이브러리를 파이썬3 에서 실행시킬 때 완벽히 실행되지 않는 경우들이 있습니다.
파이썬 업데이트 후 일부 코드의 사용 방법이 바뀌었기 때문인데요.
파이썬2 에서 동작하는 아래 코드는 파이썬3에서는 동작하지 않고 “TypeError: Expected float32, got range(0, 1000) of type ‘range’ instead.” 에러를 출력하게됩니다.
x = tf.constant(range(1000), dtype=tf.float32)
파이썬3에서 에러 없이 실행시키려면 아래처럼 코드를 바꿔주시면 됩니다.
x = tf.constant([i for i in range(1000)], dtype=tf.float32)
또는 list()를 사용해서 실행할 수 있습니다.
x = tf.constant(list(range(1000)), dtype=tf.float32)
이렇게 코드를 바꿔야 하는 이유는 파이썬3의 range()가 파이썬2의 xrange()와 동일하기 때문입니다.
파이썬3에서 xrange()는 사라지고 range()만 사용할 수 있습니다.
그리고 print 사용 방법도 달라졌습니다.
파이썬2에서는 아래와 같이 작성된 코드가 정상적으로 실행됐지만,
print "Hello, world!"
파이썬3에서는 아래와 같이 작성해야 실행이 가능합니다.
print ("Hello, world!")
파이썬3에서 세세한 부분들이 많이 바뀌어 거부감을 갖는 개발자분들도 있는 것으로 알고 있습니다.
파이썬3에서는 발생한 예외에 대해서 아주 자세히 보여줘 에러를 해결하기도 수월하고 사용성과 성능 등 많은 부분이 좋아졌다는 평가가 많습니다.
이제 파이썬2는 놓아주고 새로운 파이썬3에 적응해보시는 것도 좋을 듯합니다.
고맙습니다.