如下**:
on error resume next
1=1-1
on error goto 0
response.write("程式出錯啦!!")
on error resume next 容錯語句,只使用這一句話本頁面將不會出現錯誤。
on error goto 0 如果出現了錯誤,則執行此語句下的第1行。
err.description 出錯內容
err.number 出錯數目
err.clear 清除錯誤
應用:可以使用容錯+資料庫約束的方法,達到保持資料完整性的目的。(在最近的oa辦公系統中使用成功。)
詳細例子
1、最基本的錯誤提示
dimii =
1/0
結果:microsoft vbscript 執行時錯誤
錯誤 '800a000b'
被零除/try.asp
,行 3
2、防止系統的錯誤提示
使用on error resume next,可以放置系統提示錯誤,並且好像什麼都沒有發生一樣,沉默的執行下去
onerror
resume
next
dimii =
1/0
執行結果:
空3、檢查系統的錯誤
使用了on error resume next之後,如果出錯err物件中將放置最近一次出錯的資訊。err物件重要的屬性有三個:number, source, description。分別是錯誤號,錯誤**,錯誤描述。你能捕獲的都是執行時錯誤,而且if err then這樣的寫法等價於if err.number then
onerror
resume
next
dimii =
1/0execute
"test"
response.write err.description
執行結果:
型別不匹配
可以看到,提示的並不是被零除
4、讓系統重新接管錯誤的處理
on error goto 0 ,使用這條語句會讓系統不再沉默,一旦有錯誤發生就會提示錯誤,並結束指令碼執行。
onerror
resume
next
dimii =
1/0response.write "1"
onerror
goto0i
=1/0
response.write "2
" 執行結果:
1 microsoft vbscript 執行時錯誤
錯誤 '800a000b'
被零除/try.asp
,行 7
可以看到,第乙個1輸出了,第二個沒有。
5、on error resume next對子程式的影響
先看例子
subtest()
dimii =
1/0response.write
"ok"
end sub
subtest1()
test
response.write
"ok"
end sub
onerror
resume
next
test1
執行結果是: 空
兩個ok都沒有被列印。因為on error resume next是在最完成下達的,所以當呼叫的子程式中出了問題之後,那些子程式後面的部分無權處理,是由最完成的**來完成,會直接從子程式中跳出。
6、on error resume next對子程式的影響(2)
還是看例子
subtest()
onerror
resume
next
dimii =
1/0response.write "3
"end sub
subtest1()
test
response.write
"2 "
end sub
onerror
resume
next
test1
response.write "1
" 執行的結果是:
3 2 1
可見在test()中用了on error resume next之後,這個子程式中這條語句之後的錯誤都將自己來處理,但是err物件在退出了這個函式時並不會被清空,在test1和底層中仍然能夠通過err物件來知道test()的錯誤的發生。
7、對on error resume next行為的解釋
a、執行了on error resume next之後,在這之後的所有**產生的「未寬恕」的錯誤都不會中斷**的執行
b、如果沒有執行on error resume next,所有「未寬恕」的錯誤都會導致程式的控制流程往上層流轉,如果當前是最底層了則由系統列印錯誤。
c、「未寬恕」的錯誤導致流程往上層流轉,如果上層的子程式是在on error resume next之後呼叫了這個產生錯誤的子函式的,則這個「未寬恕」的錯誤變成了「寬恕」的錯誤,不再影響程式的流程。
d、on error resume next的作用其實是侷限於乙個子程式中的,它只能保證使用了這個語句之後,在這個子程式內的程式流程不會受到執行時錯誤的影響。而它並不會影響上層和下層的錯誤處理邏輯。
8、on error goto 0的行為與on error resume next一致,其影響都是侷限在子程式內部的。
subtest()
onerror
goto
0end sub
onerror
resume
next
test
dimii =
1/0
執行結果: 空
可見test()中的on error goto 0並不能把它的影響帶到上層去。
9、err物件的賦值
err物件會在執行時錯誤發生的時候賦予新的值,舊的值會被捨棄。
err物件不會受到函式呼叫的影響,它完全是全域性的。
err物件可以用clear方法清空
任何時候呼叫on error resume next或者on error goto 0的時候,都會清空err物件
10、小結
可見這個錯誤處理系統只能勉強用來獲得執行時錯誤的資訊,個人感覺很不方便,所以很難把程式的錯誤處理基於這樣乙個的怪異系統之上。
正確處理ASP動態網頁中的容錯機制
以國內最流行asp為例,我不知道有多少人會在寫 時想到 容錯 這個概念,實際上當我遇到這種事時,也是不了了之。為什麼呢,想想最初的意思是認為寫如下 就能容錯了,見示例1 1。language vbscript option explicit 出錯過濾 on error resume next 略 示...
正確處理ASP動態網頁中的容錯機制
以國內最流行asp為例,我不知道有多少人會在寫 時想到 容錯 這個概念,實際上當我遇到這種事時,也是不了了之。為什麼呢,想想最初的意思是認為寫如下 就能容錯了,見示例1 1。language vbscript option explicit 出錯過濾 on error resume next 略 示...
asp中server的使用
server物件有那些屬性方法以及怎樣使用 1 createobject 語法server.createobject progid 引數progid 指定要建立的元件名稱,格式如下 vendor.component version 要點 server.execute path 引數path 指定將執...