asp中容錯語句的使用

2021-06-09 06:22:40 字數 3215 閱讀 2429

如下**:

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 指定將執...