我正在使用的代码如下所示:
import os.path
def def1():
global filename
if os.path.isfile(filename+ ".txt") == True:
print ("Filename exists")
if os.path.isfile(filename+ ".txt") == False:
print("Filename dosent exist")
def def2():
global filename
filename = input("Please input the name if the file you want to see exists")
def Main():
def1()
def2()
Main()
代码的作用是检查文件是否存在,用户可以输入他/她希望检查的文件的名称。此代码将用于更大的代码文件中。我无法理解为什么在运行代码时出现此错误:
Traceback (most recent call last):
File "/Users/Sid/Desktop/existfiletest.py", line 18, in <module>
Main()
File "/Users/Sid/Desktop/existfiletest.py", line 15, in Main
def1()
File "/Users/Sid/Desktop/existfiletest.py", line 5, in def1
if os.path.isfile(filename+ ".txt") == True:
NameError: name 'filename' is not defined
我已经将变量'filename'定义为def2()中的全局变量,但是我通过调用def1()来启动程序。变量'filename'是全局的,所以我不明白为什么它不能在def1()中使用。而且,如果有人说首先调用def2(),那么这是有效的。但是我想知道在定义它之前是否可以使用变量,因为在我更大的代码中就是这种情况。
提前致谢。
答案 0 :(得分:1)
排序答案:
取代:
def Main():
def1()
def2()
通过
def Main():
def2()
def1()
您的错误不在于您在文件中先前定义了全局变量。但是首先调用def1
,你已经将变量保留为undefined。因此,您必须先调用def2
进行初始化并为其赋值。
其次,您不需要执行两次if测试:
def def1(filename):
if os.path.isfile(filename+ ".txt") == True:
print ("Filename exists")
else:
print("Filename does not exist")
答案 1 :(得分:0)
不要使用全局变量。这真的是不好的做法。使用函数参数。您可以将代码更改为:
import os.path
def def1(filename):
if os.path.isfile(filename+ ".txt") == True:
print ("Filename exists")
if os.path.isfile(filename+ ".txt") == False:
print("Filename dosent exist")
def def2():
return input("Please input the name if the file you want to see exists")
def Main():
filename = def2()
def1(filename)
Main()
当然,在定义之前你不能使用变量。但您可以使用一些默认值来定义它。
答案 2 :(得分:0)
将文件名保存在main函数中,然后将其传递给def1函数,如下所示:
import os.path
def def1(filename):
if os.path.isfile(filename+ ".txt") == True:
print ("Filename exists")
if os.path.isfile(filename+ ".txt") == False:
print("Filename dosent exist")
def Main():
filename = input("Please input the name if the file you want to see exists")
def1(filename)
Main()