2011-05-03 7 views
16

파일 경로 검색을위한 이전 버전과 호환되는 input() 호출 작성에 대한 제안 사항이 있습니까?파이썬에서 하위 호환 입력 호출

Python 2.x에서 raw_input은/path/to/file과 같은 입력에 대해 정상적으로 작동했습니다. 입력을 사용하면이 경우에는 3.x에서 제대로 작동하지만 평가 동작으로 인해 2.x에서 불만이 생깁니다. 나는이 생각을 할 수있는 더 좋은 방법이 확신

if sys.version_info[0] >= 3: 
    get_input = input 
else: 
    get_input = raw_input 

:

하나의 솔루션 및 버전에 따라, 새로운 기능에 input 또는 raw_input 중 하나를 매핑 파이썬의 버전을 확인하는 것입니다 . 누구든지 어떤 제안이 있습니까? input()의 파이썬 2.X 버전은 본질적으로 쓸모가 있기 때문에

+4

2to3을 사용하지 않고 Python 2 및 Python 3에서 실행되는 코드를 작성하려면 다음을 원한다. http://pypi.python.org/pypi/six 이미 많은 것을 해결했다. 또한 이러한 종류의 문제를 해결하는 방법에 대한 좋은 예제로도 작용합니다 (실제로 input()에서는 사용하지 않습니다). 다른 방법으로는 2to3을 사용하고 있습니다. http://python3porting.com/strategies.html을 참조하십시오. –

답변

24

, 당신은 단순히 raw_input하여 덮어 쓸 수 있습니다 : 일반적으로

try: 
    input = raw_input 
except NameError: 
    pass 

, 나는 모두 작동 코드를 목표로하지 것이다, 파이썬 2 .x 및 3.x 대신 2.x에서 작동하는 방식으로 코드를 작성하고 2to3 스크립트를 사용하여 작동하는 3.x 버전을 얻으십시오.

1

당신이 다루는 방식은 훌륭합니다. sys 모듈을 사용하는 더 유사한 방법이있을 수 있지만, 프로그램이 문자열과 파일을 사용하여 간단한 작업을 수행하는 경우 역 호환 Python3 대신 두 가지 버전의 프로그램을 사용하는 것이 더 좋습니다 프로그램.

4

이 코드는 현재 많은 Python 교육 및 교육 프로그램에서 가르쳐졌습니다.

보통 함께 가르쳤다

from __future__ import print_function 
if hasattr(__builtins__, 'raw_input'): 
    input = raw_input 

첫 번째 줄 : 파이썬 2.7에 파이썬 3.x를 print() 기능을 가져 그래서 print() 파이썬의 두 버전 모두에서 동일하게 동작합니다. 이전 print "some content" 전화로 인해 코드가 깨지면이 줄을 그대로 둘 수 있습니다.

두 번째 줄과 세 번째 줄 : 파이썬 2.7을 설정하십시오. raw_input() ~ input()input()은 문제없이 두 버전의 Python에서 모두 사용할 수 있습니다. 이것이 코드에 포함시키려는 유일한 호환성 수정 인 경우이 모두를 단독으로 사용할 수 있습니다.

기타 언어 호환성 문제는 Python.org 사이트에서 from __future__ 수입이 더 있습니다. 다른 문제를 다룰 때 호환성 솔루션을 찾을 수있는 "six"라는 라이브러리도 있습니다.

pip install future

불행하게도이 종속성이 pipreqs에 의해 발견되지 않습니다 : 당신이 종속성을 설치해야합니다,하지만

from builtins import input

:

0

내 환경 설정 기능을 가져 오는 것입니다 수단. 따라서 requirements.txt 개의 파일을 만들려면 향후 라이브러리를 수동으로 추가해야합니다.

관련 문제