In debugging upgrading to Python 3, it would be useful to be able to override the u'' string prefix to call my own function or replace with a non-u string.
I've tried things like unichr = chr
which is useful for my debugging but doesn't accomplish the above.
module.uprefix = str
is the type of solution I'm looking for.
CodePudding user response:
You basically can't; as others have noted in the comments, the u-prefix is handled very early, well before anything where an in-code assignment would take effect.
About the best you could do is use ast.parse
to read a module on disk (without importing it) and find all the u''
strings; it distinguishes the prefixes. That would help you find them in a Python-aware way, more reliably than just searching for u'
and u"
, but the difference probably wouldn't be large, especially if you search with word boundaries (regex \bu['"]
). Unless you somehow have a lot of u'
and u"
in your program that aren't the prefixes?
>>> ast.dump(ast.parse('"abc"', mode='eval'))
"Expression(body=Constant(value='abc', kind=None))"
>>> ast.dump(ast.parse('u"abc"', mode='eval'))
"Expression(body=Constant(value='abc', kind='u'))"
Per the comments, what are you trying to do? I've migrated a lot of code from Python 2 to Python 3 and never needed this... There may be a different way to achieve the same goal?