Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 26, 2012 22:55:18

Protoss
От: Айур
Зарегистрирован: 2012-11-24
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка исключения

Уважаемые господа кодеры!
Дайте пожалуйста совет, как написать исключение на то, чтобы бы ловилось отрицательное значение?
например примитивный код:

def Square():
      a=float(raw_input("Сторона а: "))
      b=float(raw_input("Сторона b: "))
      square =a*b
      print square
Square()
Как скинуть try\except на переменные А и В, чтобы при вводе отриц. значения писалась ошибка.
Получается кинуть raise, но это не то, что я хотел мне надо, чтобы пользователь мог вводите столько раз пока не пройдет. И вот к какому ужасу я пришел:
def Square():
     while True:
             try:
                        a=float(raw_input("Сторона а: "))
                        b=float(raw_input("Сторона b: ")) 
                        if a and b>=0:
                              break
                        else:
                              print "negative number"   
            except ValueError:
                  print"Wrong Value"
     square =a*b
 Square()
Этот код норм работает и пока значение не станут >=0, то он останется в цикле. Вот такой нубский код я скодил. Подскажите, как эти исключения делают нормальные кодеры?

Отредактировано Protoss (Ноя. 26, 2012 23:51:37)

Офлайн

#2 Ноя. 26, 2012 23:04:29

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Обработка исключения

А ‘if’ чем не угодил?

Офлайн

#3 Ноя. 26, 2012 23:32:36

Protoss
От: Айур
Зарегистрирован: 2012-11-24
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка исключения

Так я написал через if, но мне кажется, что можно все сделать гораздо лучше

Офлайн

#4 Ноя. 26, 2012 23:37:33

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

Обработка исключения

Protoss
Этот код норм работает
Вот прям этот? Без закрывающих кавычек в raw_input и с конструкцией:
if a,b>=0:
?

Ну и по теме, я бы как то так написал:
def safe_input(promt):
    error_message = "Value must be integer and greater or equal than zero"
    while True:
        val = raw_input(promt)
        try:
            val = int(val)
        except ValueError:
            print(error_message)
            continue
        if val < 0:
            print(error_message)
            continue
        return val
a = safe_input("a: ")
b = safe_input("b: ")
square = a * b
print(square)



Офлайн

#5 Ноя. 26, 2012 23:51:08

Protoss
От: Айур
Зарегистрирован: 2012-11-24
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка исключения

Спасибо огромное! А то я все через одно место!
Без кавычек он конечно не работает. Исправил.

Офлайн

#6 Ноя. 26, 2012 23:58:02

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

Обработка исключения

if a and b>=0:
это - тоже неправильно

попробуйте выполнить:
a = -5
b = 3
if a and b >= 0:
print("good")
else:
print("bad")



Офлайн

#7 Ноя. 27, 2012 00:58:09

Protoss
От: Айур
Зарегистрирован: 2012-11-24
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка исключения

GaiveR, спасибо. Но предыдущий вариант настолько мне понравился, что буду использовать его в как шаблон))

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version