0

関数を記述しようとしていdecode base62ますが、python で次のエラーが表示されます。

TypeError: 'int' object is not iterable

このコードはフラスコの外で完全に機能します。しかし、フラスコでは機能しません。

コードは以下の通りです:

BASE_ALPH = tuple("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
BASE_DICT = dict((c, v) for v, c in enumerate(BASE_ALPH))
BASE_LEN = len(BASE_ALPH)

def base62_decode(string):
    tnum = 0
    for char in str(string):
        tnum = tnum * BASE_LEN + BASE_DICT[char]
    return tnum


def base62_encode(num):
    if not num:
        return BASE_ALPH[0]
    if num<0:
        return False
    num = int(num)
    encoding = ""
    while num:
        num, rem = divmod(num, BASE_LEN)
        encoding = BASE_ALPH[rem] + encoding
    return encoding

このコードはフラスコの外では問題なく動作しますが、Flask アプリから呼び出すとエラーが発生します。

4

1 に答える 1

0

文字列への変換を強制し、エラーなしで実行できるかどうかを確認してから、デコードされた出力を確認してください-ある時点で、Pythonによって内部的に変換されている数値を表す文字列があり、それがエラーの原因だと思いますから:

def base62_decode(s):
    tnum = 0
    for char in str(s):
        tnum = tnum * BASE_LEN + BASE_DICT[char]
    return tnum

このコードは python 2 を想定していることに注意してください。Python 3 は、文字列を反復処理するときの動作が異なります。

于 2014-04-12T20:50:37.023 に答える