我可以覆盖 Python 2 中的 u 字符串(u'example')吗?
Can I override u-strings (u'example') in Python 2?
在调试升级到 Python 3 时,能够覆盖 u'' 字符串前缀以调用我自己的函数或替换为非 u 字符串会很有用。
我试过 unichr = chr
之类的东西,这对我的调试很有用,但没有完成上述任务。
module.uprefix = str
是我正在寻找的解决方案类型。
你基本上做不到;正如其他人在评论中指出的那样, u-prefix 处理得非常早,远早于 in-code 分配生效的任何事情。
你能做的最好的事情就是使用 ast.parse
读取磁盘上的模块(不导入它)并找到所有 u''
字符串;它区分前缀。这将帮助您以 Python-aware 的方式找到它们,比仅搜索 u'
和 u"
更可靠,但差异可能不会很大,特别是如果您使用单词边界进行搜索(正则表达式 \bu['"]
)。除非你的程序中有很多 u'
和 u"
不是前缀?
>>> 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'))"
根据评论,你想做什么?我已经将很多代码从 Python 2 迁移到 Python 3 并且从来不需要这个......可能有不同的方法来实现相同的目标?
在调试升级到 Python 3 时,能够覆盖 u'' 字符串前缀以调用我自己的函数或替换为非 u 字符串会很有用。
我试过 unichr = chr
之类的东西,这对我的调试很有用,但没有完成上述任务。
module.uprefix = str
是我正在寻找的解决方案类型。
你基本上做不到;正如其他人在评论中指出的那样, u-prefix 处理得非常早,远早于 in-code 分配生效的任何事情。
你能做的最好的事情就是使用 ast.parse
读取磁盘上的模块(不导入它)并找到所有 u''
字符串;它区分前缀。这将帮助您以 Python-aware 的方式找到它们,比仅搜索 u'
和 u"
更可靠,但差异可能不会很大,特别是如果您使用单词边界进行搜索(正则表达式 \bu['"]
)。除非你的程序中有很多 u'
和 u"
不是前缀?
>>> 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'))"
根据评论,你想做什么?我已经将很多代码从 Python 2 迁移到 Python 3 并且从来不需要这个......可能有不同的方法来实现相同的目标?