2012-11-03 58 views
1

我想從一個try塊內退出:Powershell:如何從try-catch塊中退出?

function myfunc 
{ 
    try { 
     # some things 
     if(condition) { 'I want to go to the end of the function' } 
     # some other things 
    } 
    catch { 
     'Whoop!' 
    } 

    # other statements here 
    return $whatever 
} 

我有break測試,但這個不起作用。如果任何調用代碼在循環內部,它將打破上層循環。

回答

7

各地try/catch額外的腳本塊,並在它的return可以做到這一點:

function myfunc($condition) 
{ 
    # extra script block, use `return` to exit from it 
    .{ 
     try { 
      'some things' 
      if($condition) { return } 
      'some other things' 
     } 
     catch { 
      'Whoop!' 
     } 
    } 
    'end of try/catch' 
} 

# it gets 'some other things' done 
myfunc 

# it skips 'some other things' 
myfunc $true 
+0

好的技巧(因爲是的,這是一招)。爲什麼在第一個大括號之前使用點?我沒有測試,似乎也很好。 –

+2

它不應該沒有點(在這種情況下,該功能創建並輸出腳本塊)。點運算符調用當前作用域中的腳本。還有'&'。它可以用於在新範圍內進行調用(例如,爲了隱藏函數其餘部分的一些內部變量)。 –

+0

至於*特技* ...以及PowerShell本身不提供任何退出'try/catch'的東西。 –

2

的規範的方式做你想要的是否定條件,將「其他東西」進入「然後」塊。

function myfunc { 
    try { 
    # some things 
    if (-not condition) { 
     # some other things 
    } 
    } catch { 
    'Whoop!' 
    } 

    # other statements here 
    return $whatever 
} 
+1

不,因爲我想要退出'嘗試'塊可能有幾個點。 –

+0

你應該在你的問題中提到那。此外,通過嵌套附加的if語句可以很好地實現這一點。更不用說'try/catch'模塊並不真正是你「退出」的東西。試圖這樣做(多次不少於)試圖解決問題而不是修復破壞的程序邏輯。 –

+1

第一句話中已經完全提到了這一點,標題爲:「我想退出嘗試塊」。第一個答案已經(幾乎)完美。 –

1

嗨,你可以這樣做:

function myfunc 
{ 
    try { 
     # some things 
     if(condition) 
     { 
      goto(catch) 
     } 
     # some other things 
    } 
    catch { 
     'Whoop!' 
    } 

    # other statements here 
    return $whatever 
}