2015-08-14 3 views
0

У меня есть проект, который мне нужно запустить, и я понятия не имею, как реализовать пользовательские исключения. Это, в основном, сложные научные функции, чтобы они были расплывчатыми.Python - реализация пользовательских исключений

В основном это будет сбор исключений, если что-то не установлено. Мне дали это в качестве стартового примера из runnables.

# Define a class inherit from an exception type 
class CustomError(Exception): 
    def __init__(self, arg): 
     # Set some exception infomation 
     self.msg = arg 

try: 
    # Raise an exception with argument 
    raise CustomError('This is a CustomError') 
except CustomError, arg: 

# Catch the custom exception 
print 'Error: ', arg.msg 

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

Чтобы дать общее представление, которое необходимо создать.

В функции:

if self.humidities is None: 
     print "ERROR: Humidities have not been set..." 
     return 

Видимо это нужно поднять/бросить исключение вместо этого.

+3

В чем вопрос? Ваш первый пример кода выглядит просто отлично (кроме ошибки идентификации). Есть кое-что для улучшений (fx вызывает супер '__init__' в конструкторе). – skyking

+0

Ну, 'class CustomError (Exception)' реализует настраиваемое исключение, 'raise CustomError()' вызывает его, 'except CustomError' ловит его. Что именно неясно в этом? Что * ты * знаешь, что * ты не знаешь? – deceze

+0

Идея в основном сложная неопределенная, но явно не явная. –

ответ

5

A ValueError подходит для примера влажности.

if self.humidities is None: 
    raise ValueError('Humidities value required') 

Если вы хотите быть конкретным:

class HumiditiesError(Exception): 
    pass 

def set_humidities(humidities): 
    if humidities is None: 
     raise HumiditiesError('Value required') 

try: 
    set_humidities(None) 
except HumiditiesError as e: 
    print 'Humidities error:', e.message 

Это определяет подкласс Exception с именем HumiditiesError. Поведение по умолчанию кажется достаточным для вашего примера, поэтому тело класса пуст (pass), поскольку дополнительные и измененные функции не требуются.

N.B. Предполагаемый Python 2. В Python 3 вы получите доступ к элементам кортежа e.args.