我有这个简单的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()
问题:
有人可以解释为什么即使我得到例外,我仍然会看到打印语句吗?
如果try-except
发现异常,是否可以忽略print语句?
答案 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)