2009-07-24 4 views
6

Я видел несколько вопросов об окончании скрипта после успешного завершения задачи, но есть ли способ сделать то же самое для неудачного сценария? Я пишу сценарий тестирования, который просто проверяет правильность работы камеры. Если первый тест не удается, более чем вероятно, что следующие тесты также потерпят неудачу; поэтому я хочу, чтобы первый сбой вызвал выход и предоставил вывод на экран, давая мне знать, что произошла ошибка.exit failed script run (python)

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

+0

Вы говорите об испытаниях с использованием модуля unittest? – bstpierre

+0

Нет, мой скрипт python фактически вызывает программу на C++, которая запускает тесты. Если камера не включена или объектив включен, сценарий не реагирует очень хорошо. Я хочу, чтобы мой скрипт прекратил попытки, если это так. Могут быть другие препятствия, мешающие испытаниям, поэтому я хотел бы создать свой сценарий таким образом, чтобы любая ошибка заставила скрипт выйти. – 2009-07-24 17:45:46

ответ

19

Вы только что искали функцию exit()?

import sys 

if 1 < 0: 
    print >> sys.stderr, "Something is seriously wrong." 
    sys.exit(1) 

(опция) параметр exit() является код возврата сценарий возвращается к оболочке. Обычно значения, отличные от 0, сигнализируют об ошибке.

+0

мой сценарий выглядит следующим образом: импорт SYS попытка: # функция петли ... повышение SystemExit кроме: печати 'ошибок' sys.exit() #fairly избыточные из-за предыдущий рейз заявление The повышающая система заставляет сценарий перестать работать с ошибкой или без нее. Затем, когда я вынимаю его и оставляю sys.exit(), он позволяет запустить весь скрипт, а затем сообщает, что произошла ошибка. Как я могу использовать ваш ответ, чтобы помочь? Я новый пользователь python. Что вы имеете в виду, если 1 <0? Предполагается ли это представлять условие, и я просто слишком далеко читаю его? Снова спасибо – 2009-07-24 17:39:14

+0

'if 1 <0' был всего лишь примером для условия ошибки, и в этом случае вы хотели бы прервать дальнейшее выполнение. Я не совсем уверен, что именно вам нужна помощь: 'print' выводит сообщение об ошибке, а' sys.exit() 'выходит из скрипта, разве это не все, что нужно? Что бы вы хотели работать по-другому? Зачем искать более сложное решение, если простой делает все, что нужно? – sth

+0

Я думаю, что моя проблема в том, что я не знаю, как определить ошибки, которые могут произойти. За исключением части заявления try не работает так, как я ожидал, что это ...(распознать любую ошибку и ответить соответствующим образом) – 2009-07-24 21:35:40

3

Вы можете использовать sys.exit() для выхода. Однако, если какой-либо код выше догоняет исключение SystemExit, он не выйдет.

1

Вы можете добавить исключения, чтобы определить условия ошибки. Ваш код верхнего уровня может перехватывать эти исключения и обрабатывать их соответствующим образом. Вы можете использовать sys.exit для выхода. Например, в Python 2.x:

import sys 

class CameraInitializationError(StandardError): 
    pass 

def camera_test_1(): 
    pass 

def camera_test_2(): 
    raise CameraInitializationError('Failed to initialize camera') 

if __name__ == '__main__': 
    try: 
     camera_test_1() 
     camera_test_2() 
     print 'Camera successfully initialized' 
    except CameraInitializationError, e: 
     print >>sys.stderr, 'ERROR: %s' % e 
     sys.exit(1) 
+0

Благодарим за отзыв. Могу ли я сделать что-то подобное, которое остановило бы скрипт независимо от того, что такое ошибка? Если да, то как мне это настроить? – 2009-07-24 17:42:08

+0

Конечно. Вы можете поймать исключение более высокого уровня, такое как StandardError или Exception, или вы можете поймать все с помощью «except:». –

0

Вы хотите проверить код возврата из C++ программы вы работаете, и выход, если это указывает на неисправность. В приведенном ниже коде/bin/false и/bin/true - программы, которые выходят с ошибками и кодами успеха соответственно. Замените их собственной программой.

import os 
import sys 

status = os.system('/bin/true') 
if status != 0: 
    # Failure occurred, exit. 
    print 'true returned error' 
    sys.exit(1) 

status = os.system('/bin/false') 
if status != 0: 
    # Failure occurred, exit. 
    print 'false returned error' 
    sys.exit(1) 

Это предполагает, что программа, с которой вы работаете, завершается с нулевым успехом, отличным от нуля при сбое.