Sự khác biệt giữa việc tăng ngoại lệ trong TCL qua return -code error ...
và error ...
là gì? Khi nào một người sẽ được sử dụng thay cho người kia?Sự khác biệt giữa lỗi mã trả về và lỗi
5
A
Trả lời
5
Lệnh error
tạo lỗi ngay tại điểm hiện tại; nó là tuyệt vời cho các trường hợp bạn đang ném một vấn đề do trạng thái nội bộ của thủ tục. Lệnh return -code error
làm cho quy trình được đặt trong quá trình tạo lỗi (như thể quy trình là error
); thật tuyệt vời cho trường hợp có vấn đề với các đối số được chuyển đến quy trình (tức là, người gọi đã làm điều gì đó sai). Sự khác biệt thực sự xảy ra khi bạn nhìn vào dấu vết ngăn xếp.
Dưới đây là một ví dụ (contrived!):
proc getNumberFromFile {filename} {
if {![file readable $filename]} {
return -code error "could not read $filename"
}
set f [open $filename]
set content [read $f]
close $f
if {![regexp -- {-?\d+} $content number]} {
error "no number present in $filename"
}
return $number
}
catch {getNumberFromFile no.such.file}
puts $::errorInfo
#could not read no.such.file
# while executing
#"getNumberFromFile no.such.file"
catch {getNumberFromFile /dev/null}
puts $::errorInfo
#no number present in /dev/null
# while executing
#"error "no number present in $filename""
# (procedure "getNumberFromFile" line 9)
# invoked from within
#"getNumberFromFile /dev/null"
Các vấn đề liên quan
- 1. Sự khác biệt giữa trả lại và in bằng python?
- 2. Sự khác biệt về sự khác biệt giữa Matplotlib giữa Agg và Cairo
- 3. Có sự khác biệt nào giữa NSCountResultType và countForFetchRequest: lỗi: về hiệu suất không?
- 4. Sự khác biệt về PHP giữa mảng() và []
- 5. Sự khác biệt giữa bẫy, lỗi, lỗi và phá thai chương trình là gì?
- 6. Sự khác biệt giữa lỗi thời gian chạy và lỗi trình biên dịch là gì?
- 7. Sự khác biệt phụ thuộc giữa Phát hành & Gỡ lỗi
- 8. Sự khác biệt giữa Mã hóa và đối chiếu?
- 9. Sự khác biệt giữa @string và @ + string?
- 10. Sự khác biệt giữa lỗi và lỗi trong JUnit là gì?
- 11. sự khác biệt giữa HttpResponseException và HttpException
- 12. Sự khác biệt giữa tên mã JDK, J2EE và J2SE
- 13. Sự khác biệt giữa Stream.CopyTo và MemoryStream.WriteTo
- 14. Sự khác biệt giữa $ * và $ @
- 15. Component trả về mã lỗi: 0x80040111 (NS_ERROR_NOT_AVAILABLE)
- 16. Sự khác biệt giữa! và !! trong yaml?
- 17. Sự khác biệt giữa $ (...) và `...`
- 18. Sự khác biệt giữa. và #
- 19. Sự khác biệt giữa ". +" Và ". +?"
- 20. Sự khác biệt giữa "**/* /" và "** /"?
- 21. Sự khác biệt giữa = và: =
- 22. Sự khác biệt giữa $ @ và $! trong perl
- 23. Sự khác nhau giữa e.preventDefault(); và trả về false?
- 24. Sự khác biệt giữa Verilog! và ~?
- 25. sự khác biệt về khái niệm giữa SynchronizationContext và TaskScheduler
- 26. Sự khác biệt về PHP giữa Curl và HttpRequest
- 27. Sự khác biệt về Java giữa FileWriter và BufferedWriter
- 28. Sự khác biệt về Tastypie giữa list_allowed_methods và detail_allowed_methods
- 29. Sự khác biệt về PHP giữa int và số nguyên
- 30. Sự khác biệt về PHP giữa shuffle và array_rand
Ngoài ra còn có sự khác biệt nếu bạn sử dụng 'catch' bên trong thủ tục để bẫy hai trường hợp khác nhau, nhưng đó là nhận được rất nhiều phức tạp hơn. –
Có lẽ cũng đáng nói rằng kể từ khi Tcl 8.5 'return' đã học được tùy chọn' -level' có thể được sử dụng để nâng cao lỗi ở đâu đó cao hơn, có thể được sử dụng khi thực hiện các lệnh phức tạp tùy chỉnh (thường giả vờ thành DSL). 'lỗi' không thể làm điều đó. – kostix