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"