2012-04-15 5 views
18

у меня есть это попытка/кроме кода:Как выйти из программы в try/except?

document = raw_input ('Your document name is ') 

try: 
    with open(document, 'r') as a: 
     for element in a: 
      print element 

except: 
    print document, 'does not exist' 

Как выйти из программы после того, как я печатаю «[имя файла] не существует»? break и pass явно не работают, и я не хочу, чтобы возникали ошибки, поэтому sys.exit не является вариантом.

Прошу игнорировать часть try - это всего лишь манекен.

ответ

6

Использование

sys.exit(1) 

не является сбой ошибки, это совершенно нормальный путь для выхода из программы. Код выхода из 1 - это соглашение, которое означает, что что-то пошло не так (в случае успешного запуска вы вернетесь 0).

+0

Из любопытства, есть ли что-то неправильное с использованием 'quit()'? Никто, кажется, не упоминает об этом. –

+2

'quit()' предназначен только для работы в интерактивной оболочке Python. Я бы не использовал его в программе. Он не указан в http://docs.python.org/library/functions.html, и я не ожидал, что он будет переносимым для других реализаций Python. –

23

Используйте sys.exit:

import sys 

try: 
    # do something 
except Exception, e: 
    print >> sys.stderr, "does not exist" 
    print >> sys.stderr, "Exception: %s" % str(e) 
    sys.exit(1) 

Хорошая практика для печати Exception, что происходило, так что вы можете отлаживать впоследствии.

Вы также можете распечатать stacktrace с помощью модуля traceback.

Обратите внимание, что int, возвращаемый в sys.exit, будет кодом возврата вашей программы. Для того, чтобы увидеть, что код завершения возвращается ваша программа (которая даст вам информацию о том, что происходит, и может быть автоматизирован), вы можете сделать:

echo $? 
7

Вы также можете поместить свой код в функции и выдает возврат. Вы можете назвать это основной, которую вы можете вызвать из своего сценария.

def main(): 
    document = raw_input ('Your document name is ') 

    try: 
     with open(document, 'r') as a: 
      for element in a: 
       print element 

    except: 
     print document, 'does not exist' 
     return 

if __name__ == "__main__": 
    main() 
+0

Проблема с «возвратом» в случае исключений заключается в том, что вы не увидите код ошибки в командной строке. Если у вас есть системы мониторинга, они, как правило, проверяют журналы, а также код возврата вашей программы, поэтому, если программа возвращает 0 во всех случаях, даже ошибки могут быть сложными для поддержания. –

+0

@linker Вы можете распечатать сообщение об ошибке перед возвратом. Не все программы должны выпускать продукцию для других программ - иногда просто быть читаемым человеком достаточно. – agf

+2

@agf Я просто объясняю, что я нашел наиболее полезным в контексте реального мира, лучше всего иметь как удобочитаемый, так и согласованный код кода возврата. –

5

Просто поднимите его. Это более дружественным для разработчика

document = raw_input ('Your document name is ') 

try: 
    with open(document, 'r') as a: 
     for element in a: 
      print element 

except: 
    print document, 'does not exist' 
    raise 

Проверить python document в разделе Исключения Raising об ошибке ререйз в except.

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