On Wed, Apr 21, 2010 at 4:46 AM, Sebastian <ba...@redtoad.de> wrote:
>> > My regular expressions turn the Amazon error messages into Python
>> > exceptions.
>>
>> > This works fine as long as they are in English: "??? is not a valid
>> > value for BrowseNodeId. Please change this value and retry your
>> > request.", for instance, will raise an InvalidParameterValue
>> > exception. However, the Japanese version returns the error message
>> > "??? は、BrowseNodeIdの値として無効です。値を変更してから、再度リクエス
>> > トを実行してください。" which will not be successfully handled.
>>
>> > This renders the my module pretty much useless for Japanese users.
>>
>> Your problem, then, appears to be that you're attacking the issue at the
>> wrong layer. Parsing messages in natural language and hoping to
>> reconstruct a structure is going to be an exercise in frustration.
>>
>> Doesn't the API have defined response codes and parameters that you can
>> use, instead of parsing error strings in various natural languages?
>
> No, unfortunately not. If it did, I would have used it.
>
> The Amazon API returns an XML response which contains error messages
> if a request fails. These messages consist of an error code and an
> error description in natural language. Luckily, the description seems
> to stick to the same format and is (in all but one case) in plain
> English. Much to my dismay I discovered that the Japanese locale
> translates the error message!
>
> For example, this is the bit of XML returned for the German locale:
>
>      <Errors>
>        <Error>
>          <Code>AWS.InvalidParameterValue</Code>
>          <Message>??? is not a valid value for BrowseNodeId. Please
> change this value and retry your request.</Message>
>        </Error>
>      </Errors>
>
> The corresponding part from the Japanese locale looks like this:
>
>      <Errors>
>        <Error>
>          <Code>AWS.InvalidParameterValue</Code>
>          <Message>???
> &#12399;&#12289;BrowseNodeId&#12398;&#20516;&#12392;&#12375;&#12390;&#28961;&#21177;&#12391;&#12377;&#12290;&#20516;&#12434;&#22793;&#26356;&#12375;&#12390;&#12363;&#12425;&#12289;&#20877;&#24230;&#12522;&#12463;&#12456;&#12473;&#12488;&#12434;&#23455;&#34892;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;</
> Message>
>        </Error>
>      </Errors>
>
> Of course, one could argue that the type of error (in this case
> "AWS.InvalidParameterValue") would be enough. However, in order to
> return a maeningful error message, I would like to parse the
> description itself - and for this some knowledge of Japanese would be
> helpful.

Just throwing this out there, but perhaps you could grep for the
relevant terms in the error message and intuit it from there?
For example:

# terms = whatever the actual param names are
terms = "BrowseNodeId FooNodeId FooQueryType".split()
for term in terms:
    if term in err_msg:
        raise AmazonError, err_code + " for " +repr(term)

Cheers,
Chris
--
http://blog.rebertia.com
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to