2012-07-01 4 views
24

&은 Python 2.5, 2.7 및 3.2에서 예외의 오류 값을 사용하고 싶습니다.try ... except ... Python 2.5에서 오류로 - Python 3.x

파이썬 2.5과 2.7에서

은 (그러나 3.X되지 않음)이 작동 :

try: 
    print(10 * (1/0)) 
except ZeroDivisionError, error:  # old skool 
    print("Yep, error caught:", error) 
파이썬 2.7에서

3.2 (그러나 2.5),이 작품 :

try: 
    print(10 * (1/0)) 
except (ZeroDivisionError) as error: # 'as' is needed by Python 3 
    print("Yep, error caught:", error) 

인가 2.5, 2.7 및 3.2에서 모두 작동하는이 목적을위한 코드가 있습니까?

감사

+0

당신이 당신의 2.5을 업그레이드 할 수 없습니다

except ValueError: _, err, _ = sys.exc_info() #.. use err... 

이하는 것과 같습니다

예외를 잡을 그들 모두에서 작동하는 예외에 대한 참조를 얻을 수있는 방법은 이것이다 코드를 2.7 이상, 바람직하게는 3? – Ben

+0

'오류 (ZeroDivisionError)를 제외한 오류 :'python 2.7에서 잘 작동합니다. http://ideone.com/KfHBs –

+2

Python 3은 명시 적으로 하위 호환이 아닙니다. 왜 두 언어가 지원하는 제한된 구문 집합으로 제한합니까? – Cameron

답변

36

당신은 3.2을 통해 파이썬 2.5에서 하나 개의 코드베이스를 사용할 수 있지만, 그것은 쉬운 일이 아니다. 하나의 코드 기반으로 2.3에서 3.3까지 실행되는 coverage.py을 살펴볼 수 있습니다.

except ValueError as err: 
    #.. use err... 
+0

그 작품! 고맙습니다! – user1492917

+1

효과가 있다고 인정되었지만, 아마도 치료법이 문제보다 더 나쁜 (못생긴) 경우 일 수 있습니다. 또 다른 방법은 코드를 2.5로 패키징 할 때 "as"와 코드 변환 스크립트를 사용하는 것입니다. YMMV. –

+0

문제는 파이썬이 버전간에 구문의 중요하고 불필요한 변화를 일으킨다는 것입니다. C : 버전 x.y에서 "{"대신 "@"를 사용하는 것을 상상해보십시오. 이것은 매우 어리 석고 치료법은 훨씬 좋습니다. 결국 우리는 모두 정상적으로 작동하기를 원합니다! – Terminus

관련 문제