Python中文
首页
教程
问答
标签
搜索
登录
注册
可移植代码:python2和python3之间的参数字符串类型
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>在一个所有文本文本都默认为Unicode的世界中,我应该怎么做才能使<code>__import__</code>同时在python2和python3中工作?在</p> <p>我正在慢慢地学习如何编写可以在python2(2.6或更高版本)和python3(3.2或更高版本)下运行的Python代码。在</p> <p>我认为,这就需要注意确保文本文字在默认情况下是Unicode的:</p> <pre class="lang-python prettyprint-override"><code>from __future__ import unicode_literals </code></pre> <p>如果需要,则使用<code>b'wibble'</code>显式指定字节文本。在</p> <p>但是<code>__import__</code>内置函数正在中断。在</p> <p>精心设计的、琐碎的项目布局:</p> ^{pr2}$ <p>以下是该项目的一个简单<code>fooproject/setup.py</code>:</p> <pre class="lang-python prettyprint-override"><code>from __future__ import unicode_literals main_module_name = 'foo' main_module = __import__(main_module_name, fromlist=['bar']) assert main_module.bar </code></pre> <p>这在Python 2中失败,但在Python 3下运行良好:</p> <pre class="lang-none prettyprint-override"><code>$ python2 ./setup.py Traceback (most recent call last): File "./setup.py", line 4, in <module> main_module = __import__(main_module_name, fromlist=['bar']) TypeError: Item in ``from list'' not a string $ python3 ./setup.py </code></pre> <p>我们故意将未修饰的字符串默认为Unicode。不是一个 “字符串”,我想Python2的意思是“不是一个‘字节’对象”。在</p> <p>好的,我们将显式地将其设置为<code>bytes</code>文本:</p> <pre class="lang-python prettyprint-override"><code>from __future__ import unicode_literals main_module_name = 'foo' main_module = __import__(main_module_name, fromlist=[b'bar']) assert main_module.bar </code></pre> <p>现在Python 2满足了,但是Python 3抱怨:</p> <pre class="lang-none prettyprint-override"><code>$ python2 ./setup.py $ python3 ./setup.py Traceback (most recent call last): File "./setup.py", line 4, in <module> main_module = __import__(main_module_name, fromlist=[b'bar']) File "<frozen importlib._bootstrap>", line 2281, in _handle_fromlist TypeError: hasattr(): attribute name must be string </code></pre> <p>因此,我特意将未修饰的字符串默认设置为Unicode,正如我所期望的那样;但这显然打破了python2和python3之间<code>__import__</code>的期望。在</p> <p>我怎样才能得到<code>__import__</code>调用,并完成它的<code>fromlist</code>参数,在python2和python3下都能正常工作,同时保持<code>unicode_literals</code>设置?在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>回想一下<code>str</code>对python2和python3的作用是不同的(参见@BrenBarn的评论),因此:</p> <pre><code>main_module = __import__(main_module_name, fromlist=[str('bar')]) </code></pre> <p>或者更广泛地说</p> ^{pr2}$
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何合并多个PDF文件?
5 回答
如何合并多个xarray数据变量及其坐标?
1 回答
如何合并多个列中具有重复值的行
2 回答
如何合并多个唯一id
7 回答
如何合并多个图纸并使用图纸名称的名称重命名列名?
5 回答
如何合并多个字典并添加同一个键的值?(Python)
6 回答
如何合并多个搜索结果文件(pkl)以将它们全部打印在一起?
1 回答
如何合并多个数据帧
7 回答
如何合并多个数据帧并使用Pandas为假人添加列?
6 回答
如何合并多个数据帧并按时间戳排序
10 回答
如何合并多个数据帧的列表并用另一个lis标记每列
5 回答
如何合并多个数据框中的列
10 回答
如何合并多个文件?
4 回答
如何合并多个查询集?
3 回答
如何合并多个绘图?
10 回答
如何合并多个词典
7 回答
如何合并多个输入数据集(数据帧)?
2 回答
如何合并多条记录中拆分的文本行
7 回答
如何合并多索引列datafram
7 回答
如何合并多级(即多索引)数据帧?
3 回答