2014-01-22 6 views
1

У меня есть этот простой try-except код:Игнорировать операторы печати при попытке поймать исключение

self.tf.router.EchoProg(state=1) 
try: 
    print "\tCheckTestFirmwareCommunication_SetPort: " 
    print self.tf.DUT.CheckTestFirmwareCommunication_SetPort() 
except NoResponseException, e: 
    print "\tCheckTestFirmwareCommunication_SetPort: ", repr(e) 
self.tf.router.EchoProg(state=0) 

выход с Exception:

CheckTestFirmwareCommunication_SetPort:
CheckTestFirmwareCommunication_SetPort: DD_NoResponseException()

Вопросы:

  1. Может кто-то объяснить, почему я до сих пор вижу заявления для печати, даже если я получаю исключение?

  2. Можно ли игнорировать утверждения печати, если try-except поймать исключение?

ответ

2

Это второйprint линия, которая бросает исключение:

print self.tf.DUT.CheckTestFirmwareCommunication_SetPort() 

Первая линия print не и был казнен.

Python выполняет каждый оператор в наборе try, и только когда выдается исключение, выполняется прерывание и переносится в блок except. Если вы не хотите, чтобы первый print заявления выполнить, когда CheckTestFirmwareCommunication_SetPort бросает исключение, вызова, метод первого:

self.tf.router.EchoProg(state=1) 
try: 
    port = self.tf.DUT.CheckTestFirmwareCommunication_SetPort() 
    print "\tCheckTestFirmwareCommunication_SetPort: " 
    print port 
except NoResponseException, e: 
    print "\tCheckTestFirmwareCommunication_SetPort: ", repr(e) 
self.tf.router.EchoProg(state=0) 
1

Первое print утверждения выполняются до возникновения исключения, поэтому они будут напечатаны.

Исключением здесь является self.tf.DUT.CheckTestFirmwareCommunication_SetPort(). Вы можете перемещать операторы печати под ним, чтобы они были напечатаны, когда первая строка успешно выполнена.

try: 
    print self.tf.DUT.CheckTestFirmwareCommunication_SetPort() 
    print "\tCheckTestFirmwareCommunication_SetPort: " 
except NoResponseException, e: 
    print "\tCheckTestFirmwareCommunication_SetPort: ", repr(e) 
+0

путем изменения кода, как это, выход не будет, как задумано. 'port' будет напечатан перед строкой' '\ tCheckTestFirmwareCommunication_SetPort:" ' –

+0

@RaydelMiranda Да, это правда. Я не знал, что порядок печатных заявлений важен. – Sudipta

1

Дело в том, что возбуждается исключение линии:

print self.tf.DUT.CheckTestFirmwareCommunication_SetPort() 

поэтому линия:

print "\tCheckTestFirmwareCommunication_SetPort: " 

всегда будет по казнены.

, чтобы избежать этого изменить код:

self.tf.router.EchoProg(state=1) 
try: 

    port = self.tf.DUT.CheckTestFirmwareCommunication_SetPort() 
except NoResponseException, e: 
    print "\tCheckTestFirmwareCommunication_SetPort: ", repr(e) 
else: 
    print "\tCheckTestFirmwareCommunication_SetPort: ", port 
self.tf.router.EchoProg(state=0) 
Смежные вопросы