2016-10-07 3 views
0

Я пытаюсь изучить Python, и я хочу знать, можно ли передать переменную в Exception? Это код, у меня есть:Передать переменную в исключение?

try: 
    staffId = int(row['staffId']) 
    openingSalary = int(row['initialSalary']) 
    monthsWorked = float(row['monthsWorked']) 
except CutomException: 
    pass 

class CustomException(ValueError): # raised if data conversion fails 
    def __init__(self): 
     print("There was a problem converting data") 

Я хочу передать staffId на исключение, так что я могу напечатать что-то вроде:

печати («Была проблема преобразования данных для персонала Id:», staffId)

Я попытался это, но безуспешно: How to pass a variable to an exception when raised and retrieve it when excepted?

+0

Ответ на этот вопрос вы связаны будет делать то, что вы ищете (например, вызов 'поднять CustomException' внутри вашего' try' блока) –

+0

Не было бы поднять CustomException даже там нет ошибок в блоке try? – komodo

+0

Я привел нижеприведенный ответ, чтобы проиллюстрировать его далее. Короче говоря, вам нужно условно настроить 'raise'' CustomException', чтобы каждый раз поднимать исключение. –

ответ

1

вызывающий за исключением, например, то, что исключение raise должно передать аргумент конструктору.

class CustomException(ValueError): # raised if data conversion fails 
    def __init__(self, message): 
     self.message = message; 
     print("There was a problem converting data") 


try: 
    try: 
     staffId = int(row['staffId']) 
     openingSalary = int(row['initialSalary']) 
     monthsWorked = float(row['monthsWorked']) 
    except ValueError as e: 
     raise CutomException(e); 
except CutomException: 
    pass 
+0

Как это сделать в try ... except statement? В моем примере, если предоставленная информация неверна, скажем, что вы передаете строку в staffId, тогда исключение автоматически увеличивается. По крайней мере, так я понимаю это. – komodo

+1

@komodo вы можете сделать это с вложенными исключениями, просто пройти –

1

Пользовательское исключение необходимо будет raise «d условно по try блоку, чтобы включить переменную staffId. В качестве примера, когда staffId является str, а не int.

try: 
    # conditionalize a scenario where you'd want to raise an error 
    # (e.g. the variable is a string) 
    if type(staffId) is str: 
     raise CustomException(staffId) 
    else: 
     staffId = int(row['staffId']) 
     openingSalary = int(row['initialSalary']) 
     monthsWorked = float(row['monthsWorked']) 
except CutomException: 
    pass 

class CustomException(ValueError): # raised if data conversion fails 
    def __init__(self, id): 
     print("There was a problem converting data %s" % id) 
+0

Проблема в том, что вся информация в строке является строкой, потому что они происходят из файла csv, который был извлечен в словаре. Поэтому я не могу проверить, является ли staffId строкой, потому что я уже знаю, что это так. Хорошая идея, хотя;) – komodo

+0

@komodo Я использовал это как условие из вашего комментария к другому ответу. В любом случае, я думаю, что у другого ответа есть то, что вам нужно. –