2015-08-31 2 views
-4

Я ищу способ сделать это, не проверяя используемую версию Python.Без проверки версий или `six`, как я могу использовать` except MyError, e: `vs` except MyError as e` для работы с Python 2 и 3?

Подробнее об этом, пожалуйста, обратитесь к How to write exception reraising code that's compatible with both Python 2 and Python 3?, так как этот вопрос расширяет его.

В принципе, я могу обобщить это как: «Что, если исключение на основе метода вызывает исключение на основе языка?»

Согласно Python try...except comma vs 'as' in except, следующий показать правильный синтаксис для Python 3 и Python 2:

Python 3:

except MyError as e 

Python 2, для версий 2.6+:

except MyError as e 
    #OR# 
except MyError, e 

Python 2.5-:

except MyError, e 

Немного фона:

У меня есть липкая ситуация, когда сценарий должен быть запущен на многих старых машинах Linux, в которых будет использоваться множество различных версий Python, включая Python 2.5.

К сожалению, я должен распространять это как отдельный файл с ограниченным размером, который создает некоторые ограничения на объем импорта, который я могу сделать.

Кроме того, меня интересует случай, когда один из них может неверно описать его версию или код, который можно использовать, не обязательно проверяя версию. Конечно, это можно было бы проработать.

+0

//, Пожалуйста, прокомментируйте это перед downvoting. Кроме того, я действительно посмотрел https://docs.python.org/3/howto/pyporting.html#use-same-source. –

+1

Вам действительно нужно поддерживать Python 2.5? –

+0

//, Не заставляй меня начинать с того, насколько раздражает этот случай использования, человек. Да. Да. –

ответ

4

Ваш единственный вариант, чтобы избежать назначения исключений и вытащить его из результата для sys.exc_info() function вместо:

try: 
    # ... 
except Exception: # note, no ", e" or "as e" 
    import sys 
    e = sys.exc_info()[1] 

Это будет работать на Python 1.5 и выше.

Однако вы, скорее всего, столкнетесь с другими несовместимостями и трудностями; Написание кода Polyglot Python (код, который работает как на Python 2.x, так и на 3.x), действительно работает на Python 2.6 и выше.

+0

//, Это прекрасно. И ситуация, в которой я нахожусь, на самом деле довольно распространена в развитии «Энтерпрайза», я боюсь. –

Смежные вопросы