Qual è in realtà la differenza tra il sollevamento di un'eccezione in TCL tramite return -code error ...
e error ...
? Quando si dovrebbe essere usato al posto dell'altro?Qual è la differenza tra errore e errore codice di restituzione
5
A
risposta
5
Il comando error
produce un errore proprio nel punto corrente; è ottimo per i casi in cui si genera un problema a causa dello stato interno di una procedura. Il comando return -code error
rende la procedura in cui è stato inserito un errore (come se la procedura fosse error
); è ottimo per il caso in cui c'è un problema con gli argomenti passati alla procedura (ad esempio, il chiamante ha fatto qualcosa di sbagliato). La differenza arriva quando guardi la traccia dello stack.
Ecco un esempio (escogitato!):
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"
Problemi correlati
- 1. Qual è la differenza tra errore di run-time e errore del compilatore?
- 2. Qual è la differenza tra errore, stderr, stdout nel nodo
- 3. Qual è la differenza tra errore rel e errore x in un albero decisionale rpart?
- 4. Qual è la differenza tra `{}` e `()` in questo codice?
- 5. Qual è la differenza tra Verilog! e ~?
- 6. Qual è la differenza tra? : e ||
- 7. Qual è la differenza tra $ e $$?
- 8. Qual è la differenza tra {0} e +?
- 9. Qual è la differenza tra = e: =
- 10. Qual è la differenza tra ("") e (null)
- 11. Qual è la differenza tra dict() e {}?
- 12. qual è la differenza tra [[], []] e [[]] * 2
- 13. Qual è la differenza tra " " e ""?
- 14. Qual è la differenza tra {0} e ""?
- 15. Qual è la differenza tra `##` e `hashCode`?
- 16. Qual è la differenza tra .ToString() e + ""
- 17. qual è la differenza tra:.! e: r !?
- 18. Qual è la differenza tra un errore di segmentazione e uno stack overflow?
- 19. Qual è la differenza tra questi due esempi di codice?
- 20. Qual è la differenza tra httpconnection su J2ME e HttpUrlConnection su Android (errore http 401)
- 21. Qual è la differenza tra `super (...)` e `return super (...)`?
- 22. Qual è la differenza tra "validate" e "validates"?
- 23. Qual è la differenza tra undefined e window.undefined in JavaScript?
- 24. Qual è la differenza tra kEND e $ end?
- 25. Qual è la differenza tra "stop" e "exit" in Fortran?
- 26. Qual è la differenza tra una trappola, un errore, un fallimento e l'aborto del programma?
- 27. Qual è la differenza tra le direttive di codice e blocco di codice in ReST?
- 28. Qual è la differenza tra HttpResponseException e HttpException
- 29. Qual è la differenza tra <stdio.h> e "stdio.h"?
- 30. Qual è la differenza tra un errore e un'eccezione in .NET?
Ci sono anche differenze se si utilizza 'catch' all'interno della procedura per intrappolare i due casi diversi, ma che sta diventando molto più complessa. –
Probabilmente vale anche la pena ricordare che dal momento che Tcl 8.5 'return' ha imparato l'opzione' -level' che potrebbe essere usata per generare un errore da qualche parte più in alto nello stack, che può essere usato quando si implementano comandi complessi personalizzati (di solito finta di formare una DSL). 'error' non può farlo. – kostix