首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试捕获异常时忽略print语句

尝试捕获异常时忽略print语句
EN

Stack Overflow用户
提问于 2014-01-22 14:31:48
回答 3查看 751关注 0票数 1

我有一个简单的try-except代码:

代码语言:javascript
复制
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语句?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-22 14:34:08

这是抛出异常的第二行print

代码语言:javascript
复制
print self.tf.DUT.CheckTestFirmwareCommunication_SetPort()

第一个print行没有执行并被执行。

Python只在抛出异常时执行try套件中的每条语句,并将执行中止并传输到except块。如果不希望在print抛出异常时执行第一个CheckTestFirmwareCommunication_SetPort语句,请先调用该方法

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2014-01-22 14:35:10

第一个print语句是在异常发生之前执行的,因此会打印它们。

这里的例外是由self.tf.DUT.CheckTestFirmwareCommunication_SetPort()引发的。您可以将print语句移到它下面,以便在成功执行第一行时打印它。

代码语言:javascript
复制
try:
    print self.tf.DUT.CheckTestFirmwareCommunication_SetPort()
    print "\tCheckTestFirmwareCommunication_SetPort: "  
except NoResponseException, e:
    print "\tCheckTestFirmwareCommunication_SetPort: ", repr(e)
票数 1
EN

Stack Overflow用户

发布于 2014-01-22 14:36:04

问题是,异常是由行引发的:

代码语言:javascript
复制
print self.tf.DUT.CheckTestFirmwareCommunication_SetPort()

所以这句话:

代码语言:javascript
复制
print "\tCheckTestFirmwareCommunication_SetPort: "  

永远都会被处决。

若要避免这种情况,请将代码更改为:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21285721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档