我编写了下面的代码,以检查三个文件和存在的文件,对文件运行“扫描”(如果文件不存在,不要担心它只是运行“扫描”)可用文件)并在这些可用文件上生成正确的输出文件。
我正在处理的程序包括以下代码:
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)
行没有使用全局变量?我知道他们气馁,我希望我能以另一种方式去做。此外,hashcolumn
中的filepathNum
和onlinescan()
参数是否与此有关?
答案 0 :(得分:4)
在chkifexists
内,您将返回所有三个变量,如下所示:
return (filename, hashcolumn, filepathNum)
您可以通过调用函数来检索这些:
(filename, hashcolumn, filepathNum) = chkifexists()
现在,您可以在函数范围内使用它们而无需全局变量!
从技术上讲,您也不需要括号。事实上,我不确定为什么要包括它们。但是无论哪种方式都有效,那真是太棒了。