Как вы можете заставить Python 2.x предупреждать, когда приводите строки в юникод?

Очень распространенным источником ошибок кодирования является то, что Python 2 будет молча приводить строки кunicode когда вы добавляете их вместе сunicode, Это может вызвать смешанные проблемы кодирования и может быть очень сложным для отладки.

Например:

import urllib
import webbrowser
name = raw_input("What's your name?\nName: ")
greeting = "Hello, %s" % name
if name == "John":
    greeting += u' (Feliz cumplea\xf1os!)'
webbrowser.open('http://lmgtf\x79.com?q=' + urllib.quote_plus(greeting))

произойдет сбой с загадочной ошибкой, если вы введете & quot; Джон & quot ;:

/usr/lib/python2.7/urllib.py:1268: UnicodeWarning: Unicode equal comparison faile
d to convert both arguments to Unicode - interpreting them as being unequal
  return ''.join(map(quoter, s))
Traceback (most recent call last):
  File "feliz.py", line 7, in <module>
    webbrowser.open('http://lmgtf\x79.com?q=' + urllib.quote_plus(greeting))
  File "/usr/lib/python2.7/urllib.py", line 1273, in quote_plus
    s = quote(s, safe + ' ')
  File "/usr/lib/python2.7/urllib.py", line 1268, in quote
    return ''.join(map(quoter, s))
KeyError: u'\xf1'

Особенно трудно отследить, когда фактические ошибки приходят далеко от того места, где произошло фактическое принуждение.

Как вы можете настроить python для выдачи предупреждения или исключения сразу, когда строки приводятся в юникод?

Ответы на вопрос(2)

Ваш ответ на вопрос