[Bioc-devel] Error during wrapup, what does this mean?
Robert Gentleman
rgentlem at fhcrc.org
Fri May 20 17:00:29 CEST 2005
Dipl.-Ing. Johannes Rainer wrote:
> i agree with this. but what if the user types <ctrl>+c during the call?
> i assume that try and tryCatch will not work in this cases, as i want
> also roll back a transaction when the user breaks the operation by himself.
> currently i have solved the problem in the following way:
> with options(error=expression(.rollItBack()))
Hi,
First - why assume, why not just test? Second - pass a connection in
and use on.exit? Third, from the man page for tryCatch:
User interrupts signal a condition of class 'interrupt' that
inherits directly from class 'condition' before executing the
default interrupt action.
Which seems to answer your question.
>
> and during the function call i copy the connection parameter to a global
> variable called 'ErrorConnection' which is used by the rollItBack
> function. on the 'on.exit' i reset the options(error=NULL) and remove
> the 'ErrorConnection' from the global environment...
And as I said - any and every error rolls back a transaction - not
really what you would like to have happen. Using global variables is, in
my experience, never a good idea. Explicity parameter passing, and
encapsulation via lexical scope are much easier to work with.
And what if I, as many other do, use options(error=recover) for
debugging purposes. Your code seems to have a rather unfelicitous effect.
Robert
>
> jo
>
> Quoting Robert Gentleman <rgentlem at fhcrc.org>:
>
>> James W. MacDonald wrote:
>>
>>> Dipl.-Ing. Johannes Rainer wrote:
>>>
>>>> hi, it's again me, but i found the problem...
>>>> as i am working with database connections and if an error occurs in
>>>> a function call i want to roll back the whole stuff that has been
>>>> written into a database, i thought to be smart and defined with
>>>>
>>>>> options(error=expression(.rollItBack(Con)))
>>>>
>>>>
>>>>
>>>>
>>>> where .rollItBack is a function that sends the command ROLLBACK
>>>> TRANSACTION to the database. well, i did not think, that when the
>>>> error occurs the object Con, which is a local variable in the
>>>> function does not exist, unless the user has called the connection
>>>> object also 'Con'.
>>>>
>>>> now i want to ask how i can define a global variable from within a
>>>> function.
>>>
>>>
>>>
>>> See ?"<<-" and ?assign
>>>
>>> HTH,
>>>
>>> Jim
>>>
>>
>> Hi,
>>
>> But it is generally not a good idea to do it that way. If users have
>> connections that you are using then they should be parameters to the
>> functions that you are using and using try, or tryCatch, will
>> generally be much better. I would also like to point out that if I
>> understand this, then any error the user makes will roll-back a
>> transaction - typing the wrong name for a function etc. That is
>> probably not a good design decision.
>>
>> Robert
>>
>>
>>
>>>
>>>>
>>>> cheers, jo
>>>>
>>>> Quoting "Dipl.-Ing. Johannes Rainer" <johannes.rainer at tugraz.at>:
>>>>
>>>>> hi,
>>>>> i am getting the error message:
>>>>>
>>>>>> Error during wrapup: Object "Con" not found
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> in my functions and have no idea from where this message comes (i
>>>>> have renamed some function arguments from 'Con' to 'con', maybe the
>>>>> message comes from there :) ). nevertheless i do not know where i
>>>>> should search for this error (as the functions work like they
>>>>> should...). can anybody tell me more to this error message?
>>>>>
>>>>> cheers, jo
>>>>>
>>>>> _______________________________________________
>>>>> Bioc-devel at stat.math.ethz.ch mailing list
>>>>> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>>>>>
>>>>
>>>> _______________________________________________
>>>> Bioc-devel at stat.math.ethz.ch mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>>>
>>>
>>>
>>>
>>
>>
>
>
>
More information about the Bioc-devel
mailing list