我目前正在开展一个项目,但我似乎遇到了一个逻辑错误。 我的项目是纯python,由两个文件组成:ui.py和read.py。
ui处理一个简单的cmd ui和一个缓存文件来保存用户设置。
读取通过从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()
以下是读取代码(仅发生错误的相关部分):
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 \ n问题中输入无效输入并且输入有效输入时,似乎会发生这种情况。 AKA在ui.ui()
中的else子句中出错了有什么想法吗?我尝试从ui导入ui(),我尝试在ui中运行ui并在那里分配var。
提前感谢您的帮助。
编辑:更改代码以返回ui()似乎可以解决问题,但我不明白如何解决问题。有人可以解释一下吗?
第二次编辑:我仍然不知道为什么返回ui()有效但我的整个代码可以通过将所有内容更改为带有if循环嵌套的while循环来更好地构建。比不需要递归。谢谢@dercz和@zondo