下午好,几天来我尝试从 lincolnloop 获取 Python QR-Code 模块,在 Python3 下运行。它在 Python 2.x 上完美运行。- https://github.com/lincolnloop/python-qrcode
一般来说,我对 Python 编程非常陌生,但我认为到目前为止我已经完成了我的作业。
第一个错误:
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 中不再存在 basestring,我用这里找到的这个代码语句来解决这个问题。- https://github.com/oxplot/fysom/issues/1
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
所以下一个错误出现了。
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 TypeError on regex并更改以下代码:
elif re.match('^[%s]*$' % re.escape(ALPHA_NUM), data):
至:
elif re.match(b'^[%s]*$' % re.escape(ALPHA_NUM), data):
以二进制模式处理 RegEx。但这会在同一行代码中引发下一个执行。
elif re.match(b'^[%s]*$' % re.escape(ALPHA_NUM), data):
TypeError: unsupported operand type(s) for %: 'bytes' and 'str'
我也尝试改变
ALPHA_NUM = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'
至
ALPHA_NUM = b'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'
但这不会改变 Execption。
所以这对我来说表明了与以前相同的错误,并且代码中的任何地方都必须是这种类型的错误,无论是字节还是字符串类型。但我找不到它。
我知道整个脚本对于深入研究 python 是非常复杂的,但是对于我的项目,我需要一个有效的 QR 码生成器。
有人可以给我一个线索吗?提前致谢!