Как вызвать собственную ошибку при отсутствии одного аргумента? - PullRequest
0 голосов
/ 02 мая 2018

Привет, я довольно новичок в Python, и я только начал узнавать об ошибках и исключениях. У меня есть эта функция в классе, который вставляет строку по заданному индексу с именем num. Я знаю, что Python выдаст ошибку, если номер не указан, но я хочу поднять свою собственную ошибку. Как мне это сделать? Это то, что я пытался. Но возникшая ошибка по-прежнему является ошибкой по умолчанию?

 def insertNum(self, num, line):
    if num== None:
        raise Exception("Num not specified.")
    else:
        self.list.insert(num, line)
    return self.list

Ответы [ 4 ]

0 голосов
/ 02 мая 2018

оберните вашу функцию другой функцией, которая будет иметь try и исключая`, и там вы можете вызвать любую ошибку / исключение, которое вы хотите.

def wrapper_func(self, num, line):
    try:
        self.insertNum(num, line)
    except Exception as e:
        raise Exception("whatever you want")
0 голосов
/ 02 мая 2018

Предлагаю вам прочитать о исключениях и ошибках
Но основная идея в том, что вы ловите ошибки, а затем обрабатываете их так, как вам нравится.

try: 
 #do something 
except Exception as e:
 # error occured
 print("A wild error appeared")
0 голосов
/ 02 мая 2018

Вы можете использовать try...except оператор.

def insertNum(num, line):
   try:
     list.insert(num, line)
     return list
   except:
     print('custom error')
0 голосов
/ 02 мая 2018

Можно установить значение по умолчанию от num до None, а затем проверить, является ли значение None.

def insertNum(self, line, num=None):
    if num is None:
        raise Exception("Num not specified.")
    else:
        self.list.insert(num, line)
    return self.list

Если вы передадите только один параметр методу insertNum, для num будет установлено None (значение по умолчанию) и будет сгенерировано исключение.

Если вы не хотите изменять порядок аргументов, вы можете использовать это:

def insertNum(self, num, line=None):
    if line is None:
        raise Exception("Num not specified.")
    else:
        self.list.insert(num, line)
    return self.list

Простая демонстрация работы аргументов по умолчанию:

>>> def foo(bar, baz=None):
...     print(bar, baz)
...
>>> foo(1, 2)
1 2
>>> foo(2)
2 None
...