Hi Theodore,
On 10 October 2012 at 02:30, Theodore Lytras wrote:
| Hello all,
|
| I am using RInside in my application to execute some R code with parseEval()
| and parseEvalQ().
|
| However, if the R code passed to parseEval() contains syntax errors, my
| application crashes with an error ("Error: Parse Error: <expression>.
| Execution halted").
|
| I tried putting the parseEval() call inside a try...catch block (as per the
| RInside examples) but no exception seems to be thrown.
|
| Isn't there any way to detect these parse errors without crashing the
| application?
A classic yes/no/maybe.
I looked at that recently. The main reason it dies is that we are NOT in
interactive mode -- so the parse error leads to immediate death by design.
So as a start you can turn a toggle on and force interactive mode. But in
that case you end up in code branch that is underdeveloped:
switch (status){
case PARSE_OK:
// Loop is needed here as EXPSEXP might be of length > 1
for(i = 0; i < Rf_length(cmdexpr); i++){
ans = R_tryEval(VECTOR_ELT(cmdexpr, i), global_env_m,
&errorOccurred);
// NB: we never actually get here if interactice is set to FALSE as
it is above
if (errorOccurred) {
Rf_error("%s: Error in evaluating R code (%d)\n", programName,
status);
UNPROTECT(2);
return 1;
}
if (verbose_m) {
Rf_PrintValue(ans);
}
}
mb_m.rewind();
break;
and the following statements. This needs work/extensions.
Alternatively, you could tru to wrap each R expression that could fail in its
own try/catch block. I have not tried that.
Dirk
--
Dirk Eddelbuettel | [email protected] | http://dirk.eddelbuettel.com
_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel