1

こんにちは、数日間、Python3 で実行されている lincolnloop から Python QR コード モジュールを取得しようとしています。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 に存在しなくなりました。ここにあるこのコード ステートメントでこれを修正します。- 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): 

バイナリモードで正規表現を処理します。しかし、これはコードの同じ行で次の実行をスローします。

    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 コード ジェネレーターが必要です。

誰かが私に手がかりを与えることができますか?前もって感謝します!

4

1 に答える 1

0

bytesオブジェクトで % 演算子を使用することはできません。あなたが今扱っているデータは本当にバイナリデータですか、それともテキストですか? テキストの場合は、実際にはバイトではなく文字列として処理する必要があります。

また、モジュールの作成者と話してください。彼らはすでに多くの移植を行っているかもしれませんし、喜んで手伝ってくれるかもしれません。第三に、このトピックに関する無料の本であるpython3porting.comを読んでください。

Unicode とバイト データの両方を処理すること、移植の難しい部分です。どちらか一方を一貫して使用していることを確認する必要があり、多くの場合、正しく設定するのは非常に困難です。

于 2012-12-29T21:42:09.483 に答える