尝试捕获异常时忽略打印语句

时间:2014-01-22 14:31:48

标签: python exception try-except

我有这个简单的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)

输出异常:

  

CheckTestFirmwareCommunication_SetPort:
  CheckTestFirmwareCommunication_SetPort:   DD_NoResponseException()

问题:

  1. 有人可以解释为什么即使我得到例外,我仍然会看到打印语句吗?

  2. 如果try-except发现异常,是否可以忽略print语句?

3 个答案:

答案 0 :(得分: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 :(得分: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)

答案 2 :(得分: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)
相关问题