Python 打字错误。我不知道';我不明白错误是什么
我设计了一个程序,可以在给定的文件目录下读写文件。我做了read函数,当我测试它时,我得到了这个错误Python 打字错误。我不知道';我不明白错误是什么,python,typeerror,Python,Typeerror,我设计了一个程序,可以在给定的文件目录下读写文件。我做了read函数,当我测试它时,我得到了这个错误 TypeError:强制使用Unicode:需要字符串或缓冲区,找到内置函数或方法 代码是: def file(): dir = raw_input("DIR : ") def read(): f = open(dir, "r") for line in f: print line.strip("\n") f.close def main():
TypeError:强制使用Unicode:需要字符串或缓冲区,找到内置函数或方法
代码是:
def file():
dir = raw_input("DIR : ")
def read():
f = open(dir, "r")
for line in f:
print line.strip("\n")
f.close
def main():
file()
op = raw_input("ACTION : ")
if op == "read":
read()
if __name__ == "__main__":
main()
它说错误在以下行中:
f = open(dir, "r")
另外,如果有人能建议我可以添加什么,以便能够写入文件,您应该阅读。问题是函数
read
不知道变量dir
。通常,这会导致名称错误
,但在这种情况下,dir
也是内置函数的名称。正是这个函数传递给open
调用,从而导致所看到的错误。您应该将目录名作为read
函数的参数。一般来说,您应该避免与内置名冲突的名称。您的代码中有一些问题,但是类型错误是因为dir
不是您想象的那样。是一个python内置函数
您可能认为,由于在文件
函数中设置了dir
,因此它将继续在读取
函数中设置。这不是真的。Python变量有一个作用域——它们(通常)只存在于函数/模块/。。。定义它们的地方1。函数向调用者传递数据的最佳方法是返回值。然后可以使用参数将该值传递给其他函数。我将对您的代码进行的一些最小修改如下所示:
def file():
return raw_input("DIR : ")
def read(dir):
f = open(dir, "r")
for line in f:
print line.strip("\n")
f.close()
def main():
dir = file()
op = raw_input("ACTION : ")
if op == "read":
read(dir)
if __name__ == "__main__":
main()
这里可以做更多的更改(更改名称dir
和file
以避免与内置文件冲突,使用上下文管理器进行文件资源管理等),但这至少应该让您开始
1这里还有闭包和全局
和非局部
关键字,它们让事情变得更加困难,但它们与这个答案没有太大关系,所以我将对这些细节进行润色 swstephe所建议的全球化通常是个坏主意,应该尽量避免。
更喜欢使用参数:
def file():
dir = raw_input("DIR : ")
return dir
def read(dir):
f = open(dir, "r")
for line in f:
print line.strip("\n")
f.close
def main():
dir = file()
op = raw_input("ACTION : ")
if op == "read":
read(dir)
函数的作用是:设置一个局部变量“dir”,然后将其丢弃。open中的“dir”是变量,而不是变量。如果要以这种方式传递值,请在每个函数的顶部添加“global dir”。因此,如果一个变量要在多个函数中使用,而不是在其写入的函数中使用,则需要在其前面加上“global”(在函数中修改或创建的变量)(这是文件()
中的dir
的情况)除非您手动将它们指定为全局变量,否则它们始终被视为该函数的局部变量。您应该从函数中返回一个值,而不是使用一个全局变量(您几乎不应该这样做)。