首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Python模块转换为Python 3时出错

将Python模块转换为Python 3时出错
EN

Stack Overflow用户
提问于 2012-12-29 20:17:58
回答 1查看 848关注 0票数 1

下午好,我尝试了几天,从在Python3下运行的lincolnloop获得。它在Python2.x上运行得很好。- https://github.com/lincolnloop/python-qrcode

总的来说,我对Python编程非常陌生,但我认为到目前为止我已经完成了我的家庭作业。

第一个错误:

代码语言:javascript
复制
 File "/usr/lib/python3.2/qrcode/util.py", line 274, in __init__

    if not isinstance(data, basestring):
NameError: global name 'basestring' is not defined

所以基弦不再存在于Python3中了,我用这里找到的这个代码语句来修正这个问题。- https://github.com/oxplot/fysom/issues/1

代码语言:javascript
复制
try:
    unicode = unicode
except NameError:
    # 'unicode' is undefined, must be Python 3
    str = str
    unicode = str
    bytes = bytes
    basestring = (str,bytes)
else:
    # 'unicode' exists, must be Python 2
    str = str
    unicode = unicode
    bytes = str
    basestring = basestring

所以下一个错误出现了。

代码语言:javascript
复制
  File "/usr/lib/python3.2/qrcode/util.py", line 285, in __init__
    elif re.match('^[%s]*$' % re.escape(ALPHA_NUM), data):
  File "/usr/lib/python3.2/re.py", line 153, in match
    return _compile(pattern, flags).match(string)
TypeError: can't use a string pattern on a bytes-like object

因此,我尝试在这里找到的解决方案- 正则表达式上的Python,并从以下代码中更改:

代码语言:javascript
复制
elif re.match('^[%s]*$' % re.escape(ALPHA_NUM), data):

至:

代码语言:javascript
复制
elif re.match(b'^[%s]*$' % re.escape(ALPHA_NUM), data): 

以二进制模式处理RegEx。但这会将下一次强制执行抛到同一行代码中。

代码语言:javascript
复制
    elif re.match(b'^[%s]*$' % re.escape(ALPHA_NUM), data):
TypeError: unsupported operand type(s) for %: 'bytes' and 'str'

我也试着改变

代码语言:javascript
复制
ALPHA_NUM = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'

代码语言:javascript
复制
ALPHA_NUM = b'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'

但这不会改变购买权。

因此,对于我来说,这表明了与前面的错误相同的错误,代码中的任何地方都必须是这种类型的错误--不管是字节还是字符串类型。但我找不到。

我知道整个脚本对于深入python是非常复杂的,但是对于我的项目,我需要一个工作的QR代码生成器。

谁能给我个线索吗?提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2012-12-29 21:42:09

不能在bytes对象中使用%运算符。您正在处理的数据是真正的二进制数据,还是文本?如果是文本,则应该将其作为字符串来处理,而不是以字节的形式处理。

此外,与模块的作者交谈。他们可能已经做了很多移植工作,或者他们可能愿意帮忙。第三,阅读python3porting.com,一本关于这个主题的免费书籍。

处理Unicode和字节数据是移植的难点。你必须确保你不断地使用一个或另一个,这往往是相当痛苦的正确。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14085566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档