将输入函数作为变量传递

时间:2015-05-07 04:41:01

标签: python input

我想创建在终端中运行的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是一个已定义的变量,对吧?

2 个答案:

答案 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

问题是inputFilefunction内的局部变量。 function完成运行后,它就不再存在。

可以通过将global inputFile添加到function的顶部,将其作为全局变量来解决此问题。

但你不需要。它已经使用return inputFile返回值(或者至少有时它是......不会将其更改为return True ...),并且您已经使用filename = function()存储了返回的值

所以,你真正想做的是改变最后一行:

print inputFile

......对此:

print filename

教程的一个较弱的部分Defining Functions涵盖了局部变量。 (如果你是一个习惯于编写编译器和口译员的C程序员,那么这部分是一个很好的指南;如果你是一个新手,那就不那么了......)但是,local variables上的维基百科文章很好地解释了一般的想法。