Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

raised UnicodeEncodeError when printing GCloudError exception #2346

Closed
cesterlizi opened this issue Sep 19, 2016 · 2 comments
Closed

raised UnicodeEncodeError when printing GCloudError exception #2346

cesterlizi opened this issue Sep 19, 2016 · 2 comments
Assignees
Labels
api: core type: bug Error or flaw in code with unintended results or allowing sub-optimal usage patterns.

Comments

@cesterlizi
Copy link

cesterlizi commented Sep 19, 2016

When exception was received from google storage and UnicodeEncodeError exception was raised

try:
    client = storage.Client()
    bucket = client.get_bucket(bucket_name)
except exceptions.NotFound as e:
    print e

raised

unexpected: UnicodeEncodeError('ascii', u'502 <!DOCTYPE html>\n<html lang=en>\n  <meta charset=utf-8>\n  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">\n  <title>Error 502 (Server Error)!!1</title>\n  <style>\n    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}\n  </style>\n  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>\n  <p><b>502.</b> <ins>That\u2019s an error.</ins>\n  <p>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.  <ins>That\u2019s all we know.</ins>\n (GET https://www.googleapis.com/storage/v1/b/anura-recordings-ar?projection=noAcl)', 1445, 1446, 'ordinal not in range(128)')

This is the unicode string that caused the problem -> That\u2019s all we know.

The problem seems to be the __str__ function in your base exception class.

class GCloudError(Exception):
    ....
    def __str__(self):
        return '%d %s' % (self.code, self.message)

HOW TO REPRODUCE

try:
    a = u'That\u2019s all we know'
    print a
    raise exceptions.NotFound(a)
except exceptions.GCloudError as e:
    print e

which gives

$ python test_gs2.py
That’s all we know
Traceback (most recent call last):
  File "test_gs2.py", line 11, in <module>
    print e
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 8: ordinal not in range(128)
@dhermes dhermes added api: core type: bug Error or flaw in code with unintended results or allowing sub-optimal usage patterns. labels Sep 19, 2016
@daspecster
Copy link
Contributor

@cesterlizi thanks for reporting!

@dhermes would making this a unicode string solve this properly for py2 and py3?

 def __str__(self):
        return u'%d %s' % (self.code, self.message)

@dhermes
Copy link
Contributor

dhermes commented Sep 19, 2016

@daspecster I'm not 100% on that. We probably want to implement __unicode__ as well. I always consult http://www.rafekettler.com/magicmethods.html in these situations

daspecster added a commit to daspecster/google-cloud-python that referenced this issue Sep 19, 2016
daspecster added a commit to daspecster/google-cloud-python that referenced this issue Sep 21, 2016
daspecster added a commit to daspecster/google-cloud-python that referenced this issue Sep 21, 2016
daspecster added a commit to daspecster/google-cloud-python that referenced this issue Sep 21, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
api: core type: bug Error or flaw in code with unintended results or allowing sub-optimal usage patterns.
Projects
None yet
Development

No branches or pull requests

3 participants