Tcl - Penanganan Error
Penanganan kesalahan di Tcl disediakan dengan bantuan error dan catchperintah. Sintaks untuk masing-masing perintah ini ditampilkan di bawah.
Kesalahan sintaks
error message info code
Dalam sintaks perintah kesalahan di atas, pesan adalah pesan kesalahan, info diatur dalam errorInfo variabel global dan kode diatur dalam kode kesalahan variabel global.
Tangkap Sintaks
catch script resultVarName
Dalam sintaks perintah catch di atas, script adalah kode yang akan dieksekusi, resultVarName adalah variabel yang menahan kesalahan atau hasilnya. Perintah catch mengembalikan 0 jika tidak ada kesalahan, dan 1 jika ada kesalahan.
Contoh penanganan kesalahan sederhana ditunjukkan di bawah ini -
#!/usr/bin/tclsh
proc Div {a b} {
if {$b == 0} { error "Error generated by error" "Info String for error" 401 } else { return [expr $a/$b] } } if {[catch {puts "Result = [Div 10 0]"} errmsg]} { puts "ErrorMsg: $errmsg"
puts "ErrorCode: $errorCode" puts "ErrorInfo:\n$errorInfo\n"
}
if {[catch {puts "Result = [Div 10 2]"} errmsg]} {
puts "ErrorMsg: $errmsg" puts "ErrorCode: $errorCode"
puts "ErrorInfo:\n$errorInfo\n"
}
Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -
ErrorMsg: Error generated by error
ErrorCode: 401
ErrorInfo:
Info String for error
(procedure "Div" line 1)
invoked from within
"Div 10 0"
Result = 5
Seperti yang Anda lihat pada contoh di atas, kami dapat membuat pesan kesalahan khusus kami sendiri. Demikian pula, dimungkinkan untuk menangkap kesalahan yang dihasilkan oleh Tcl. Contohnya ditunjukkan di bawah ini -
#!/usr/bin/tclsh
catch {set file [open myNonexistingfile.txt]} result
puts "ErrorMsg: $result"
puts "ErrorCode: $errorCode" puts "ErrorInfo:\n$errorInfo\n"
Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -
ErrorMsg: couldn't open "myNonexistingfile.txt": no such file or directory
ErrorCode: POSIX ENOENT {no such file or directory}
ErrorInfo:
couldn't open "myNonexistingfile.txt": no such file or directory
while executing
"open myNonexistingfile.txt"