2016-07-15 8 views
0

Я поднимаю исключение и пытаюсь обработать исключение в фрагменте. Часть исключающих исключений и обработка исключающей части выполняются в функции. Не так ли?Могу ли я поднять и обработать исключения в той же функции

import sys 

def water_level(lev): 
    if(lev<10): 
     raise Exception("Invalid Level!") 

    print"New level=" # If exception not raised then print new level 
    lev=lev+10 
    print lev 

    try: 
     if(level<10): 
      print"Alarming situation has occurred." 
    except Exception: 
     sys.stdout.write('\a') 
     sys.stdout.flush() 

    else: 
     os.system('say "Liquid level ok"') 

print"Enter the level of tank" 
level=input() 
water_level(level) #function call 

Выход не является исключением. Может кто-нибудь объяснить мне, почему?

ответ

0

Лучше всего просто вызвать исключение в функции, а затем поймать его при вызове функции, чтобы ваша функция не делала слишком много, и ваша обработка ошибок независима. И это делает ваш код более простым.

Ваш код никогда не доходил до вашего предложения except, потому что, если уровень воды слишком низок, он вызывает исключение и выпрыгивает из функции, и если бы это было нормально, оно просто достигало положения else. Оператор print в вашем предложении try также никогда не достигается, поскольку он является тем же условием, что и тот, который вызывает ваше исключение, и что один выпрыгивает.

Ваш код должен быть что-то в этом роде ...

import sys 
import os 

def water_level(level): 
    #just raise exception in function here 
    if level < 10: 
    raise Exception("Invalid Level!") 

    level = level + 10 

    print("New level=") # If exception not raised then print new level 
    print(level) 

#function call 
print("Enter the level of tank") 

#cast to int 
level=int(input()) 

try: 
    #call function in here 
    water_level(level) 

#catch risen exceptions 
except Exception as e: 
    sys.stdout.write('\a') 
    sys.stdout.flush() 

    #print exception(verification) 
    print(e) 

    print("Alarming situation has occurred.") 
else: 
    os.system('say "Liquid level ok"') 

Обратите внимание, что я исправил некоторые другие недостатки

  • import os был пропавшие
  • вы должны бросить ваш input() к числу так что вы может выполнять численные сравнения и дополнения
  • старайтесь избегать наименее конкретного исключения Exception, потому что вы тоже поймаете все остальные исключения (вот почему я добавил print(e)) -> подумайте о пользовательских исключениях
+0

Мне нужна помощь в редактировании кода, когда он набирается на экране. Раздел моих комментариев имеет большой размер, и какой-то код работает на одной линии, пожалуйста, помогите. – Butters

+0

Пожалуйста, отметьте ответ как принятый, если он решит вашу проблему. –

+0

Я действительно не понимаю, что вы хотите сказать своим комментарием. –