写入文件触发NameError: name 'write' is not defined错误的排查求助
解决写入Tor配置文件时的NameError问题
嘿,我来帮你拆解一下这个问题~你遇到的NameError: name 'write' is not defined错误,核心问题出在代码的写法上,我给你逐个分析:
代码2的致命错误
你在代码2里写了这行:
file = write(""" VirtualAddrNetwork 10.192.0.0/10 AutomapHostsOnResolve 1 TransPort 9040 DNSPort 53""")
这里的问题是:Python里根本没有全局的write()函数,write是文件对象的方法,必须通过你打开的文件变量(也就是这里的file)来调用,而且不需要把write的返回值重新赋值给file(write返回的是写入的字节数,不是新的文件对象)。
修正后的代码2应该是这样:
file = open("/etc/tor/torrc","a") file.write(""" VirtualAddrNetwork 10.192.0.0/10 AutomapHostsOnResolve 1 TransPort 9040 DNSPort 53""") file.close() # 手动打开文件后一定要记得关闭,避免数据丢失
代码1的小问题(逻辑本身没问题)
代码1用了Python推荐的with上下文管理器写法,它会自动帮你关闭文件,逻辑上是完全正确的,理论上不会触发NameError。不过我发现你里面有个拼写错误:把TransPort写成了ransPort(少了开头的T),这个错误不会导致Python报错,但会让Tor的配置项失效,建议修正:
with open("/etc/tor/torrc", "a") as myfile: myfile.write(""" VirtualAddrNetwork 10.192.0.0/10 AutomapHostsOnResolve 1 TransPort 9040 DNSPort 53""")
为什么代码1也会报错?
如果你确定运行代码1时也出现了NameError,大概率是你实际执行时不小心写错了代码——比如把myfile.write误写成了直接write,或者复制粘贴时丢了前缀。你可以再仔细核对一下代码内容,确保是通过文件对象调用write方法。
内容的提问来源于stack exchange,提问作者user10827429
相关产品推荐
相关产品推荐

