Tcl - Xử lý lỗi

Xử lý lỗi trong Tcl được cung cấp với sự trợ giúp của errorcatchcác lệnh. Cú pháp cho mỗi lệnh này được hiển thị bên dưới.

Cú pháp lỗi

error message info code

Trong cú pháp lệnh lỗi ở trên, thông báo là thông báo lỗi, thông tin được đặt trong errorInfo biến toàn cục và mã được đặt trong Mã lỗi biến toàn cục.

Bắt cú pháp

catch script resultVarName

Trong cú pháp lệnh catch ở trên, script là mã được thực thi, resultVarName là biến lưu giữ lỗi hoặc kết quả. Lệnh catch trả về 0 nếu không có lỗi và 1 nếu có lỗi.

Dưới đây là một ví dụ để xử lý lỗi đơn giản:

#!/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"
}

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

ErrorMsg: Error generated by error
ErrorCode: 401
ErrorInfo:
Info String for error
   (procedure "Div" line 1)
   invoked from within
"Div 10 0"

Result = 5

Như bạn có thể thấy trong ví dụ trên, chúng ta có thể tạo các thông báo lỗi tùy chỉnh của riêng mình. Tương tự, có thể bắt lỗi do Tcl tạo ra. Một ví dụ được hiển thị bên dưới -

#!/usr/bin/tclsh

catch {set file [open myNonexistingfile.txt]} result
puts "ErrorMsg: $result"
puts "ErrorCode: $errorCode"
puts "ErrorInfo:\n$errorInfo\n"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

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"