Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 19, 2012 20:04:06

creator
Зарегистрирован: 2012-08-19
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

исключения

в общем, только начал изучать python.
сут в следующем, например, есть на php такой код

if($this->id == 0)
                throw new Exception('ERROR: your ID is empty');
            elseif($this->balance == 0)
                throw new Exception('ERROR: your BALANCE is empty');
            elseif(mb_strlen($this->name) == 0 or $this->name == '')
                throw new Exception('ERROR: your NAME is empty');
            elseif(mb_strlen($this->name) > 100)
                throw new Exception('ERROR: your NAME is longer than 100 symbols');
то есть обычная обработка исключений.

вопрос, как можно подобное реализовать на python?
о есть, я прикинул так:
if os.path.exists('users/' + str(self.uid) + '.txt'):
            try:
                #а что тут?
            except:
                return 'ERROR: file with ' + str(self.uid) + ' id is already exists'
        elif self.balance < 0:
            try:
                #а что тут?
            except:
                return 'ERROR: your BALANCE is less than 0'
или я неправильно мыслю?поскажите

Отредактировано creator (Авг. 19, 2012 20:05:01)

Офлайн

#2 Авг. 19, 2012 20:24:06

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

исключения

Вы плохо представляете себе, что такое _обработка_ исключений. throw в питоне называется raise.
Например:

raise ValueError
raise TypeError('String expected')

http://docs.python.org/tutorial/errors.html



Отредактировано fata1ex (Авг. 19, 2012 20:24:43)

Офлайн

#3 Авг. 19, 2012 21:01:57

creator
Зарегистрирован: 2012-08-19
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

исключения

написал я так

try:
            if os.path.exists('users/' + str(self.uid) + '.txt'):
                raise NameError, 'ERROR: file with ' + str(self.uid) + ' id is already exists'
            elif self.balance < 0:
                raise ValueError, 'ERROR: your BALANCE is less than 0'
            else:
                return self.saveData()
        except (NameError, ValueError):
            raise

вроде выводит исключение, но перед ним идет такая трассировка
Traceback (most recent call last):
   File "file.py", line 23, in func
    raise ValueError, 'ERROR: your BALANCE is less than 0'

Офлайн

#4 Авг. 19, 2012 23:02:42

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

исключения

просто

if os.path.exists('users/' + str(self.uid) + '.txt'):
    raise NameError, 'ERROR: file with ' + str(self.uid) + ' id is already exists'
elif self.balance < 0:
    raise ValueError, 'ERROR: your BALANCE is less than 0'
else:
    return self.saveData()
без try except.
Вообще-то fata1ex привел ссылку. Можно вместо ссылки книжку почитать - хотя конечно
“Two hours of trial and error can save ten minutes of manual reading”

Отредактировано EBFE (Авг. 19, 2012 23:03:25)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version