2013-07-01 4 views
0

У меня проблема с исключениями python. Мое программное обеспечение в настоящее время работает на нескольких платформах, и я все еще нацелен на то, чтобы быть совместимым с py2.5, потому что он находится в кластере, где изменение версий станет серьезным усилием.Обработка исключений с несколькими версиями python

Одна из систем (debian) была недавно обновлена ​​с 2.6 до 2.7, а некоторые фрагменты кода вызывают странные исключения из лежащих в основе частей C. Тем не менее, это никогда не было раньше, и все еще не так на моем mac 2.7 -> в коде нет ошибок, а в одной из новых библиотек.

Я понял, как управлять исключением для 2.7, но обработка исключений, к сожалению, несовместима с 2.5.

Есть ли способ запустить что-то вроде «команд препроцессора - стиль C?»?

if interpreter.version == 2.5: 
foo() 
elif interpreter.version == 2.7: 
bar() 

?

Приветствия, Эль

Пример прилагается:

try:                          
    foo() 
except RuntimeError , (errorNumber,errorString): 
    print 'a' 
    #ok with 2.5, 2.7 however throws exceptions 

try:                          
    foo() 
except RuntimeError as e: 
    print 'a' 
#ok with 2.7, 2.5 does not understand this 

ответ

1

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

import sys 

if sys.version_info[:2] == (2, 7): 
    try: 
     pass 
    except: 
     # Use 2.7 compatible exception 
     pass 
elif sys.version_info[:2] == (2, 5): 
    try: 
     pass 
    except: 
     # Use 2.5 compatible exception 
     pass 
0

Вы можете написать свой обработчик исключений, чтобы быть совместимым с как питона версии вместо:

try:                          
    foo() 
except RuntimeError, e: 
    errorNumber, errorString = e.args 
    print 'a' 

Демо:

>>> def foo(): 
...  raise RuntimeError('bar!') 
... 
>>> try: 
...  foo() 
... except RuntimeError, e: 
...  print e.args 
... 
('bar!',) 

Там нет необходимости делать определение версии Python здесь , если вам это не понадобится для работы с версиями от 2,5 до 2,7 и Python 3.x.