我想创建在终端中运行的python脚本。而不是用户将文件名设置为脚本中的变量,保存,然后运行,我以为我可以使用raw_input
为用户添加他们自己选择的文件。然后程序读入文件,拼接值,进行计算和结束。
所以,我编写了一个可以处理异常的函数:
def function():
inputFile = raw_input('Type in file name: ')
if inputFile.endswith((".txt")):
return True
else:
raise ValueError("Extension must be .txt")
return inputFile
然后我调用函数
function()
提示用户提供该文件。
filename = function()
结果为NameError: name 'inputFile' is not defined
。
现在,我想自动使用上面为inputFile
输入的内容。但是,如果我在代码中使用此变量,则无法识别该值。我认为现在inputFile
是一个已定义的变量,对吧?
答案 0 :(得分:1)
我发现你的功能有一个基本问题。我假设您正在寻找文本文件(以.txt
结尾的文件),但是一旦找到它,您就永远不会从函数返回文件名;你只需要回复True
。
您需要像这样修改您的功能:
def check_input_file():
input_file = raw_input('Please enter a filename: ')
if input_file.endwith('.txt'):
return input_file
else:
print('File name should end in .txt')
return check_input_file()
filename = check_input_file()
答案 1 :(得分:0)
很难说,因为你不断给我们提供完全不相关的异常代码,或者没有问题的代码。
但我想我无论如何都能猜到你的意思。
在您的真实代码中,您可以执行以下操作:
def function():
inputFile = raw_input('Type in file name: ')
if inputFile.endswith((".txt")):
return inputFile
else:
raise ValueError("Extension must be .txt")
return inputFile
filename = function()
print inputFile
这是最后一行,你从未在任何编辑中向我们展示过,引发了这个例外:
Traceback (most recent call last):
File "if.py", line 11, in <module>
print inputFile
NameError: name 'inputFile' is not defined
问题是inputFile
是function
内的局部变量。 function
完成运行后,它就不再存在。
可以通过将global inputFile
添加到function
的顶部,将其作为全局变量来解决此问题。
但你不需要。它已经使用return inputFile
返回值(或者至少有时它是......不会将其更改为return True
...),并且您已经使用filename = function()
存储了返回的值
所以,你真正想做的是改变最后一行:
print inputFile
......对此:
print filename
教程的一个较弱的部分Defining Functions涵盖了局部变量。 (如果你是一个习惯于编写编译器和口译员的C程序员,那么这部分是一个很好的指南;如果你是一个新手,那就不那么了......)但是,local variables上的维基百科文章很好地解释了一般的想法。