2014-01-22 43 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) 

輸出有例外:

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)