2015-03-01 4 views
0

Сообщения Stackoverflow очень помогли мне с Python, однако я застрял на этом. Я не могу понять, как просто пропустить модуль, если в нем есть исключения. Кроме того, если это происходит, мне нравится изменять одну переменную, чтобы остальная часть кода знала, чтобы пропустить функции, связанные с этим модулем.Обработка исключений Python в модуле

У меня есть main.py, который загружает мой модуль sms.py. Здесь вы также видите мою попытку, которая не работает:

try: 
    import sms 
except ImportError: 
    print "Ok, lets skip that module" 
    dont_use_sms = 1 

Часть sms.py, которая вызывает исключение выглядит следующим образом:

import gammu 

sm = gammu.StateMachine() 

sm.ReadConfig() 
try: 
    sm.Init() # this one to be exact 
except: 
    raise 

, когда я запускаю это я получаю следующее:

Traceback (most recent call last): 
    File "./main.py", line 10, in <module> 
    import sms 
    File "/path/to/sms.py", line 7, in <module> 
    sm.Init() 
gammu.ERR_DEVICENOTEXIST: {'Text': u"Error opening device, it doesn't exist.", 'Code': 4, 'Where': 'Init'} 

Я попытался изменить исключение, поставив gammu.ERR_DEVICENOTEXIST в качестве аргумента, однако это не помогло. Я чувствую, что это исключение должно быть каким-то образом обработано sms.py и правильно перенаправлено на main.py, но не может понять, как это сделать.

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

Что вы для предложений.

+0

Я не понимаю, почему у вас есть голый код в 'sms.py' ... Вы должны обернуть, что в' init_sms' функции или подобное ... Затем из 'main.py' просто используйте' import sms' и используйте try/except вокруг 'sms.init_sms()', где это подходит в основной логике - таким образом вы можете обнаружить устройство, которое не подключено в main, делать что угодно, и повторите 'sms.init_sms()' или иначе следуйте за другой ветвью логики –

ответ

0

Вы также можете изменить свой main.py.

Вместо:

except ImportError: 

вы можете сказать:

except: 

И тогда он должен продолжать.

PS: Голый кроме выписок не хороший стиль

+0

Это действительно работает и делает то, что я хотел. Но я буду смотреть вперед, потому что. как уже упоминалось, это не очень хорошая практика. Спасибо! –

+0

Да. Но у вас уже есть обнаженная фраза except в sms.py. Итак, у вас есть прецедент. – sureshvv

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