请让我知道下面python代码中的问题

请让我知道下面python代码中的问题,python,Python,我正在尝试编写这段代码,它将测试文件是否存在,然后读取并打印。 我已将此代码编写为名为readFile.py的文件,并尝试使用execfile命令在shell中运行它。我已经放置了许多打印STMT以检查控件的位置。结果显示只有前两个打印STMT,控件没有进入def readFile。我找不到原因,需要帮助。谢谢 print 'i am doing fine' filename = "train-win.dat" print 'i am doing fine1' def readFile():

我正在尝试编写这段代码,它将测试文件是否存在,然后读取并打印。 我已将此代码编写为名为readFile.py的文件,并尝试使用execfile命令在shell中运行它。我已经放置了许多打印STMT以检查控件的位置。结果显示只有前两个打印STMT,控件没有进入def readFile。我找不到原因,需要帮助。谢谢

print 'i am doing fine'
filename = "train-win.dat"
print 'i am doing fine1'
def readFile():
        print 'i am doing fine2'
        import os
        print 'i am doing fine3'

        if os.path.exists(filename):
                print 'i am doing fine4'
                f = open(filename,"r")
                print 'i am doing fine5'
                a = f.readlines()
                print 'i am doing fine6'
                print a
                print 'i am doing fine7'
        f.close()p
您定义了ReadFileFile函数,但尚未调用它,因此它永远不会执行。在文件末尾添加以下内容,不缩进:

readFile()
此外,函数的最后一行出现语法错误:

 f.close()p
p不应该在那里

完成这两项更改后,您的程序似乎可以运行。

您定义了函数readfile,但尚未调用它,因此它将永远不会执行。在文件末尾添加以下内容,不缩进:

readFile()
此外,函数的最后一行出现语法错误:

 f.close()p
p不应该在那里


在做了这两个更改之后,您的程序似乎可以运行。

虽然您的代码可以通过另一个答案中所示的小修改来运行,但编写Python的常用方法以稍微不同的顺序呈现代码。如果没有额外的打印语句,我可能会写:

import os

def readFile():
    if os.path.exists(filename):
        f = open(filename, "r")
        a = f.readlines()
        print a
        f.close()

filename = "train-win.dat"
readFile()
第一件事是导入模块。通常这是在文件的顶部完成的

下一部分将定义一个名为readFile的函数。def语句在执行时实际上没有做任何事情,但是Python会记住稍后要执行的块中的语句

最后,readFile实际上调用readFile函数


还要注意,我在if语句中移动了f.close。如果f一开始从未被打开过,你就不会想关闭它。

虽然你的代码会在另一个答案中显示出一些小的修改,但是编写Python的通常方式会以稍微不同的顺序呈现代码。如果没有额外的打印语句,我可能会写:

import os

def readFile():
    if os.path.exists(filename):
        f = open(filename, "r")
        a = f.readlines()
        print a
        f.close()

filename = "train-win.dat"
readFile()
第一件事是导入模块。通常这是在文件的顶部完成的

下一部分将定义一个名为readFile的函数。def语句在执行时实际上没有做任何事情,但是Python会记住稍后要执行的块中的语句

最后,readFile实际上调用readFile函数


还要注意,我在if语句中移动了f.close。如果f从一开始就没有被打开过,你就不会想关闭它。

。您不应该在def结束后的第0列添加一个“readFile”来调用readFile吗?格式正确地打印文本。你不是应该在def结束后在第0列添加一个“readFile”来调用readFile吗?我有点迂腐,但def语句实际上做了一些事情:它在当前堆栈帧的f_locals属性中创建一个条目,该属性由函数名键控,并设置函数所需的任何闭包。这是一个完整的、一流的声明:程序在执行之前和之后处于不同的状态,而不是,比如说,C.@aaronsterling:虽然你是对的,但我认为这种详细程度对于第一次明确学习Python的人来说是没有用的。尽管说它什么都不起作用是误导性的。它创建一个函数值并将其指定给函数名。如果有人很难理解这一点,那么他们需要接受并理解它,因为它很重要。对于openfilename中的行,r:打印行可以说在风格上更好,但对于刚刚学习这门语言的人来说,也可能有点太电信化了。@Aronsterling:我说过,Python会记住块中稍后要执行的语句。我只是没有提到像f_局部变量或堆栈帧或闭包之类的技术细节,我保证这对刚开始的程序员来说没有任何意义。我很迂腐,但def语句确实做了一些事情:它在当前堆栈帧的f_局部变量属性中创建了一个条目,由函数名设置关键字,并设置任何闭包除其他事项外,功能所需。这是一个完整的、一流的声明:程序在执行之前和之后处于不同的状态,而不是,比如说,C.@aaronsterling:虽然你是对的,但我认为这种详细程度对于第一次明确学习Python的人来说是没有用的。尽管说它什么都不起作用是误导性的。它创建一个函数值并将其指定给函数名。如果有人很难理解这一点,那么他们需要接受并理解它,因为它很重要。对于openfilename中的行,r:打印行可以说在风格上更好,但对于刚刚学习这门语言的人来说,也可能有点太电信化了。@Aronsterling:我说过,Python会记住块中稍后要执行的语句。我只是没有提到 像f_局部变量、堆栈框架或闭包之类的技术细节,我保证对一个刚开始的程序员来说没有任何意义。