python代码中的导入和递归错误?

2024-06-17 08:15:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做一个项目,我似乎遇到了一个逻辑错误。 我的项目是纯python的,由两个文件组成:用户界面以及阅读.py. 你知道吗

ui处理一个简单的cmd ui和一个缓存文件来保存用户设置。你知道吗

Read通过import from ui从缓存文件获取数据,以便解析某些文件(文件解析与问题无关) 以下是ui的代码:

def read_cache():
    with open("cache.txt", "r+") as f:
        byt = f.read()
        byt = byt.split()
    return byt


def write_cache(a, b):
    with open("cache.txt", "w") as f:
        f.write(a + "\n" + b)


def ui():
    g = raw_input("Use cache file? (y/n): ")

    if g == "y":
        i = read_cache()
        return i

    elif g == "n":
        zipname = raw_input("Zip file name: ")
        direc = raw_input("Zip file folder directory: ")
        write_cache(zipname, direc)
        i = [zipname, direc]
        return i
    else:
        print("ERROR: Please input a valid y/n \n")
        ui()

下面是read的代码(仅发生错误的相关部分):

import ui

x = ui.ui()
zipname = x[0]
direc = x[1]

错误是:Traceback (most recent call last): File "read.py", line 11, in <module> zipname = x[0] TypeError: 'NoneType' object has no attribute '__getitem__'

当我在y问题中输入无效的输入,而不是输入有效的输入时,似乎会发生这种情况。又名else子句出错用户界面()

有什么想法吗?我试着只从ui导入ui(),我试着在ui中运行ui并在那里分配一个var。你知道吗

事先谢谢你的帮助。你知道吗

编辑:将代码改为returnui()似乎可以解决这个问题,但我不明白怎么做。有人能解释一下吗?你知道吗

第二次编辑:我仍然不知道为什么returnui()可以工作,但是我的整个代码可以通过将所有内容更改为一个while循环并嵌套if循环来更好地构建。不需要递归。谢谢@dercz和@zondo


Tags: 文件代码uicachereadinputrawreturn