1

I have this simple try-except code:

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)

Output with Exception:

CheckTestFirmwareCommunication_SetPort:
CheckTestFirmwareCommunication_SetPort: DD_NoResponseException()

Questions:

  1. Can someone explain why i still see the print statements even if i get an exception?

  2. Is it possible to ignore print statements if the try-except catch an exception?

4

3 回答 3

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)
于 2014-01-22T14:34:08.793 回答
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)
于 2014-01-22T14:35:10.867 回答
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)
于 2014-01-22T14:36:04.357 回答