2012-04-09 2 views
2

Я довольно новичок в Python. Мне было интересно, как добиться простой обработки ошибок без использования исключений, что иногда (я думаю) перебор. я придумал с рисунком, но я не уверен, если это вещий путь:Python, простой шаблон обработки ошибок

def someFunct(someArgs): 
    # do stuff... 
    if error: 
     return False, 'error message' 
    return True,None 

и вызывающий абонент будет делать что-то вроде этого

success,errMsg = someFunct(myAwesomeArgs) 
if success: 
    # yey! 
else: 
    # handle error 
+0

Спасибо за ответы. Подведение итогов: исключения в python не так дороги (да, я пришел из Java). – Pedru

+1

Если вы делаете код более сложным, чтобы избежать исключений, из-за неподдельной озабоченности по поводу производительности, вы, вероятно, не должны использовать Python в первую очередь ... это говорит о том, что очень большая% озабоченности по поводу производительности не является подлинной :) –

+0

Я считаю, что использование исключений в python - это правило, а не ... исключение –

ответ

0

Вы бы сделали то же самое, что и вы. :) Но да, передача ошибок через исключение не является исключительной, она довольно распространена в python, поэтому идиоматически вы хотели бы использовать исключение. Но вот ваш код (бит изменен)

def somefunc(*args): 

    # do stuff, return -1 on eror 
    error_value = do_suff() 
    if error_value == -1: 
      return True, "error message" 
    else: 
      return False, None 

success, err = somefunc(1,2) 

if success: 
    # yay! 
else: 
    # handle error 
3

Использование исключений в python не является излишним, что так всегда. Исключения в питоне используется в нескольких местах, чтобы контролировать поток приложения, например, позволяет визуализации у вас есть следующий метод, используя ваш шаблон:

def some_function(*args): 
    """Do stuff using a loop.""" 

    for i in [1, 2, 3, 4]: 
     print i 

    return True, None 

Там, есть уже исключение, которое является StopIteration exception, то есть даже когда вы пытались избежать использования исключения, оно используется внутри. Поэтому мой ответ заключается в использовании исключений, это не Java, C# и т. Д., Где исключения чрезвычайно дороги по сравнению с остальной частью кода, и вы просто делаете код нерентичным.

0
def someFunct(someArgs): 
    try: 
    # do stuff... 
    return True,None 
    except: 
     return False, 'error message' 

, если вы знаете, что может быть увеличена ошибка, которую вы можете использовать:

except errorType1: 
     return False, 'very bad' 
    except errorType2: 
     return False, 'very very bad' 
    except errorType3: 
     return False, 'the computer is dead. get a new one' 

и так далее.

Смежные вопросы