PEP 249 Compliant error handling

Cameron Simpson cs at cskk.id.au
Wed Oct 18 17:14:35 EDT 2017


On 17Oct2017 21:38, Karsten Hilbert <Karsten.Hilbert at gmx.net> wrote:
>> That's certainly a possibility, if that behavior conforms to the DB API "standards". My concern in this front is that in my experience working with other PEP 249 modules (specifically psycopg2), I'm pretty sure that columns designated as type VARCHAR or TEXT are returned as strings (unicode in python 2, although that may have been a setting I used), not bytes. The other complication here is that the 4D database doesn't use the UTF-8 encoding typically found, but rather UTF-16LE, and I don't know how well this is documented. So not only is the bytes representation completely unintelligible for human consumption, I'm not sure the average end-user would know what decoding to use.
>>
>> In the end though, the main thing in my mind is to maintain "standards" compatibility - I don't want to be returning bytes if all other DB API modules return strings, or visa-versa for that matter. There may be some flexibility there, but as much as possible I want to conform to the majority/standard/whatever
>
>
>The thing here is that you don't want to return data AS IF it was correct despite it having been
>"corrected" by some driver logic.

I just want to say that I think this is correct and extremely important.

>What might be interesting to users is to set an attribute on the cursor, say,
>   cursor.faulty_data = unicode(faulty_data, errors='replace')
>or some such in order to improve error messages to the end user.

Or perhaps more conveniently for the end user, possibly an option supplied at 
db connect time, though I'd entirely understand wanting a cursor option so that 
one can pick and choose in a fine grained fashion.

Cheers,
Cameron Simpson <cs at cskk.id.au> (formerly cs at zip.com.au)



More information about the Python-list mailing list