国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > ASP > 正文

ASP 3.0高級編程(三十一)_ASP教程

2024-05-04 11:03:57
字體:
來源:轉載
供稿:網友

推薦:深入理解ASP中FSO的神奇功能
在ASP中,FSO的意思是File System Object,即文件系統對象。我們將要操縱的計算機文件系統,在這里是指位于web服務器之上。所以,確認你對此擁有合適的權限。理想情況下,你可以在自己的機器

7.1.2 語義或“運行期”錯誤
語法錯誤的發現和處理是令人煩惱的,但在編程中會遇到一些真正“令人興奮”的另一類型的錯誤——語義錯誤(semantic error)或稱“運行期”錯誤(runtime error)。這類錯誤僅當運行一個腳本代碼或其他程序時才會發現。換句話說完整有效的代碼已經通過解釋器或編譯器的解釋或編譯,在執行時產生了錯誤。術語“運行期錯誤”通過是指語義錯誤的結果,也就是說這類錯誤存在于代碼的語義中,當代碼運行時它們才變成可見的。
這種區別來自于這種事實:程序編譯器或解釋器在處理程序代碼之前必須建立一種內部代碼的描述,涉及多種結構開頭和結尾的匹配,以便標明每種結構包含什么內容,然后分析每個句子,以便知道如何執行這個句子。例如,如果在程序代碼中有一個If Then … Else … End If 結構,解釋器或編譯器做的第一步工作就是分析哪些語句在“Then”的部分,哪些在“Else”部分。這一步的目的是,在對結構中的If條件進行測試之后,可以決定該到哪個分支去執行。
編譯器(諸如在編程語言像Visual Basic和C 中見到的那種)和解釋器(諸如用于像VBScript和JScript那樣的腳本語言的解釋器)之間真正區別在于:編譯器不試圖運行程序代碼,而是在對源程序進行兩次預處理后,形成二進制指令或符號代碼,并形成一個.exe文件或.dll文件。解釋器不含有代碼的文件,而是在運行時逐步執行。
1. 使運行停止的錯誤
如果程序中含有一個語義錯誤,通常在運行時可得到提示。如果幸運的話,當錯誤發生時,程序會停止,這樣可以容易地找出錯誤所在。例如,下面這段程序定義了一個有六個元素的數組。
<%
Dim arrValues(5) 'to hold six elements, indexed from 0 to 5
ArrValues(6) = "Whoops, got an error"
%>
如果試圖讀或設置下標為6的元素值,可以得到一個運行期錯誤,如圖7-7所示:

圖7-7 程序執行結果6
注意這里的錯誤類型是“runtime”(相當于語義)錯誤,而不是語法錯誤。錯誤信息顯示了錯誤所在行數和錯誤的描述,有助于我們比較容易地找到相應的錯誤。但這是一個簡單的例子,在更復雜的程序代碼中,這種錯誤可能出現在一些遍歷一些值并把它們加到一個數組中程序中。如下所示:
<%
Dim arrValues(5) ' to hold six elements
For intLoop = 0 To intListCount ' the number of items in some list
arrValues(intLoop) = Request.Form("SelectedItems")(intListCount)
Next
%>
這種情況下,很可能是得到了過多的列表條目,或者是數組的索引不夠,根據代碼的要求,可以判斷是那種錯誤,并且能夠通過增加數組大小來解決這個錯誤。
<%
Dim arrValues(10) ' to hold eleven elements
For intLoop = 0 To intListCount ' the number of items int some list
arrValues(intLoop) = Request.Form("SelectedItems")(intListCount)
Next
%>
或者相應地設置循環的參數來解決處理這個錯誤。
<%
Dim arrValues(5) ' to hold six elements
IntArrayMax = intListCount
If intArrayMax > 5 Then intArrayMax = 5
For intLoop = 0 To intArrayMax ' only add the first six items
arrValues(intLoop) = Request.Form("SelectedItems")(intListCount)
Next
%>
許多其他運行期錯誤能夠使網頁運行停止,諸如一些組件或對象的實例化失敗,原因是有ProgID錯誤,或者是因為組件沒有正確安裝。在這些情況下,結果總是給出“ActiveX Cannot Create Object”錯誤提示信息,后面跟著調用Server.CreateObject方法的行號。
2. 產生錯誤結果的錯誤
上面提到,如果遇到一個使程序代碼停止的運行期錯誤,我們可能是幸運的。但是另一種情況是程序能很好地執行,好像什么也沒有發生,最后產生一個錯誤的結果。這是最難發現和解決的錯誤,因為意識不到哪里出錯了。例如,假設有一個網頁,這個網頁把用戶的生日作為日期型的值,并且單獨顯示日期元素(可以把它們作為三個條目加到一個數據庫中)。
<%
' get the value from the Request and display it
datBirthdate = Request.Form("Birthdate")
Response.Write "The value you entered is: " & datBirthdate & "<P>"

' get the individual date elements
intDay = Day(datBirthdate)
intMonth = Month(datBirthdate)
intYear = Year(datBirthdate)

' and display them
Response.Write "Day: " & Cstr(intDay) & "<BR>"
Response.Write "Month: " & Cstr(intMonth) & "<BR>"
Response.Write "Year: " & Cstr(intYear) & "<BR>"
%>
圖7-8是結果,是用美國日期風格月/日/年顯示的,好像一切都沒有問題。

圖7-8 顯示生日的屏幕
然而如果輸入一個非法日期,或者讓輸入文本框空著,便得到一個運行期錯誤,如圖7-9所示:

圖7-9 錯誤提示屏幕
(1) 如果不是一位JScript專家
在尋找錯誤時,這不是一個大問題,因為我們能夠迅速發現為什么會出現錯誤。事實上網頁停止運行有助于我們跟蹤錯誤。然而意外的錯誤可能會發生。例如,用JScript重寫程序代碼,由于不是一位JScript專家,里面出現一些細小錯誤。
<%
// get the value from the Request and display it
var datBirthdate = new Date(Request.Form("Birthdate"));
Response.Write("The value you entered is: " datBirthdate "<P>");

// get the individual date elements
intDay = datBirthdate.getDay();
intMonth = datBirthdate.getMonth();
intYear = datBirthdate.getYear();

// and display them
Response.Write("Day: " intDay.toString() "<BR>");
Response.Write("Month: " intMonth.toString() "&

分享:用ASP實現就MP3曲目信息的操作全攻略
先簡單說一下MP3的ID3 標記,因為主要是操作這個玩意MP3最開始的時候沒有我們今天看到的那樣,有歌手、年代,專集等等信息只有一些簡單的參數如yes/no來表示是不是privated或者copyrighted等

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 韶关市| 泰宁县| 唐山市| 开封县| 石景山区| 温宿县| 平阴县| 泌阳县| 马龙县| 开江县| 昌邑市| 美姑县| 永定县| 巩留县| 革吉县| 应城市| 邵阳县| 揭东县| 麻江县| 璧山县| 雅安市| 绥中县| 翼城县| 嘉祥县| 黄冈市| 凤凰县| 渭南市| 金沙县| 文登市| 乌拉特后旗| 衡阳县| 交口县| 道真| 信丰县| 会同县| 麦盖提县| 延长县| 荣昌县| 安陆市| 友谊县| 兰溪市|