我写了下面的代码来检查三个文件和存在的文件,在文件上运行"scan"(如果文件不存在,不要担心,只需在可用的文件上运行"scan"),并在这些可用的文件上生成适当的输出文件。
我正在处理的程序包括以下代码:
def InputScanAnswer():
scan_number = raw_input("Enter Scan Type number: ")
return scan_number
该函数检查这三个文件是否存在,如果存在,将特定的值赋给hashcolumn
和filepathNum
def chkifexists():
list = ['file1.csv', 'file2.csv', 'file3.csv']
for filename in list:
if os.path.isfile(filename):
if filename == "file1.csv":
hashcolumn = 7
filepathNum = 5
if filename == "file2.csv":
hashcolumn = 15
filepathNum = 5
if filename == "file3.csv":
hashcolumn = 1
filepathNum = 0
#print filename, hashcolumn, filepathNum
def ScanChoice(scan_number):
if scan_number == "1":
chkifexists()
onlinescan(filename, filename + "_Online_Scan_Results.csv", hashcolumn, filepathNum) #this is what is giving me errors...
elif scan_number == "2":
print "this is scan #2"
elif scan_number =="3":
print "this is scan #3"
else:
print "Oops! Invalid selection. Please try again."
def onlinescan(FileToScan, ResultsFile, hashcolumn, filepathNum):
# web scraping stuff is done in this function
我遇到的错误是global name 'filename' is not defined
。我意识到问题是我试图将局部变量从chkifexists()
发送到onlinescan()
参数。我试着用
return filename
return hashcolumn
return filepathNum
在chkifexists()
函数的末尾,但这也不起作用。有没有什么方法可以做我在
onlinescan(filename, filename + "_Online_Scan_Results.csv", hashcolumn, filepathNum)
行没有使用全局变量?我知道他们很沮丧,我希望我能以另一种方式去做。此外,在onlinescan()
中具有hashcolumn
和filepathNum
参数是否与此有关?
在chkifexists
中,您将返回所有三个变量,如下所示:
return (filename, hashcolumn, filepathNum)
您可以通过像这样调用函数来检索它们:
(filename, hashcolumn, filepathNum) = chkifexists()
你现在在你的函数作用域中不需要全局变量了!
从技术上讲,也不需要括号。事实上,我不确定我为什么要把它们包括在内。但这两种方式都可以,所以管它呢