【问题标题】:python variable returns None even if variable can be printed right before the return statement即使变量可以在返回语句之前打印,python 变量也返回 None
【发布时间】:2022-11-04 19:17:19
【问题描述】:

这是一个简单的分词器和解析器的一部分。我不明白为什么 get_token() 会返回 None 即使 token_value 之前已成功打印 return "returning: " + token_value

s = "int i = 2; i <= n; i += 5)"
cursor = 0

def is_string(c):
    return c.isalnum() or c == "_"

def has_more_tokens():
    return cursor < len(s)

def get_token():
    global cursor
    token_value = ""

    string = s[cursor: ]
    if not has_more_tokens():
        return
    if string[0] == " ":
        cursor += 1
        get_token()
        return
    if is_string(string[0]):
        token_value = ""
        for char in string: # extract the whole expression <int x = a + b;>
            if char in [";", ",", ")"]:
                cursor += 1
                break
            token_value += char
            cursor += 1
        print("before returning: ",token_value)
        return "returning: " + token_value
    return "error"

while has_more_tokens():
    print(get_token())
    print()

【问题讨论】:

  • 你能进一步调试吗?尝试在每个空的 return ex: return "nothing" 之后添加一个语句,仅用于调试目的并告诉我输出。
  • @AlyMobarak 你好,我想通了!我应该在第二个 if 语句下返回 get_token()。谢谢!

标签: python python-3.x return return-value


【解决方案1】:

get_token() 的结果在递归调用时不会返回。因此,它返回None

修复了这个部分:

if string[0] == " ":
        cursor += 1
        return get_token() #fix here

【讨论】:

    猜你喜欢
    • 2018-05-11
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多