python2 字符串类型_可移植代码:python2和python3之间的参数字符串类型

在一个所有文本文本都默认为Unicode的世界中,我应该怎么做才能使__import__同时在python2和python3中工作?在

我正在慢慢地学习如何编写可以在python2(2.6或更高版本)和python3(3.2或更高版本)下运行的Python代码。在

我认为,这就需要注意确保文本文字在默认情况下是Unicode的:from __future__ import unicode_literals

如果需要,则使用b'wibble'显式指定字节文本。在

但是__import__内置函数正在中断。在

精心设计的、琐碎的项目布局:

^{pr2}$

以下是该项目的一个简单fooproject/setup.py:from __future__ import unicode_literals

main_module_name = 'foo'

main_module = __import__(main_module_name, fromlist=['bar'])

assert main_module.bar

这在Python 2中失败,但在Python 3下运行良好:$ python2 ./setup.py

Traceback (most recent call last):

File "./setup.py", line 4, in

main_module = __import__(main_module_name, fromlist=['bar'])

TypeError: Item in ``from list'' not a string

$ python3 ./setup.py

我们故意将未修饰的字符串默认为Unicode。不是一个

“字符串”,我想Python2的意思是“不是一个‘字节’对象”。在

好的,我们将显式地将其设置为bytes文本:from __future__ import unicode_literals

main_module_name = 'foo'

main_module = __import__(main_module_name, fromlist=[b'bar'])

assert main_module.bar

现在Python 2满足了,但是Python 3抱怨:$ python2 ./setup.py

$ python3 ./setup.py

Traceback (most recent call last):

File "./setup.py", line 4, in

main_module = __import__(main_module_name, fromlist=[b'bar'])

File "", line 2281, in

_handle_fromlist

TypeError: hasattr(): attribute name must be string

因此,我特意将未修饰的字符串默认设置为Unicode,正如我所期望的那样;但这显然打破了python2和python3之间__import__的期望。在

我怎样才能得到__import__调用,并完成它的fromlist参数,在python2和python3下都能正常工作,同时保持unicode_literals设置?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值