我正在使用log4net嘗試使用表達式,它不起作用。我認爲缺少一些東西,但我不知道是什麼。 這裏是我的代碼:log4net和「with try」F#
let clusterIDArray = try
myfunction
with
log.Fatal("my function is not working")
log.Debug("my function is working")
任何想法?
我正在使用log4net嘗試使用表達式,它不起作用。我認爲缺少一些東西,但我不知道是什麼。 這裏是我的代碼:log4net和「with try」F#
let clusterIDArray = try
myfunction
with
log.Fatal("my function is not working")
log.Debug("my function is working")
任何想法?
有在您的代碼段兩個錯誤:
try...with...
塊在語法上不正確。假設我們捕捉異常,並返回在任何情況下一個數組,記錄的更地道的方式可以是:
let clusterIDArray =
try
let result = myfunction args // Assume args are arguments declared before
log.Debug("my function is working")
result
with
| ex ->
// ex is of type exception which can be parsed by log4net
log.Fatal("my function is not working: ", ex)
[||]
謝謝你。這裏的一個問題是作爲一個Array類型的結果,而log.Fatal作爲一個類型單元,當我編寫它時似乎是一個問題。我想在發生異常時停止執行代碼,但我不知道如何在異常情況下返回數組類型。 – fabco63 2012-02-23 17:46:43
只需在'log.Fatal'後面的行中返回一個空數組['||]'。我建議您將異常的堆棧跟蹤包含到日誌中,以便知道導致問題的原因。 – pad 2012-02-23 17:50:12
我建議使用'log.Fatal(「not working」,ex)'。如果需要,Log4net可以解析異常並打印堆棧跟蹤。 – 2012-02-24 16:11:47
很難說不知道myfunction
是什麼,但是就像你寫的那樣,代碼實際上並沒有運行這個函數。它只是將其作爲值(來自try .. with
塊)返回並將其分配給clusterIDArray
值,因此代碼將永遠不會丟失。
如果該功能只需一個unit
的說法,你可以把它叫做try .. with
塊像這裏面(如果它需要一些參數,你需要給他們的塊內的功能):
let clusterIDarray =
try
myfunction()
with _ ->
log.Fatal("not working")
reraise() // You still need to return something here or rethrow the exception
log.Debug("my function is working")
編輯正如其他人所指出的,語法with e
無效。如果您要忽略該異常,則需要編寫with e ->
或with _ ->
。
謝謝托馬斯。事實上我不是很清楚,我的函數接受一個字符串作爲參數並返回一個數組(clusterViewName |> readDSLClusterID)。那麼我是否需要在「with」部分中返回相同類型(即數組)?我在嘗試像let clusterIDArray = try clusterViewName |> readDSLClusterID with | :?例外 - > log.Fatal(「ClustersID not downloaded」) – fabco63 2012-02-23 17:27:19
是的,你必須返回一個空數組(即使用'[| |]'),或者你需要調用'reraise()'來重新拋出異常而不返回。 – 2012-02-23 17:52:14
再次感謝托馬斯和帕德你的答案,它的工作,現在對我來說很清楚。 – fabco63 2012-02-23 18:00:45
你沒有捕捉異常。我認爲'嘗試與_ - > log.Fatal(「我的功能不工作」)功能將工作。 – pad 2012-02-23 17:05:20
謝謝你,你是完全正確的。此外,我發現了一些http://stackoverflow.com/questions/4972436/f-try-with-unhandled-exceptions。對不起,幾乎重複的問題。 – fabco63 2012-02-23 17:08:23