从函数中打印返回的文件

时间:2017-10-22 14:45:33

标签: python function return

我只想打印一个从单独函数返回的文件:

def open_file():
    while True:
        try:
            filename = input("Input a file name: ")
            file=open(filename,'r')
            return file
        except FileNotFoundError:
            print("Error: Enter a valid file.")
            continue
        else:
            break
open_file()
for line in file:
    print(line)

它提示输入文件,并在输入无效文件时给出错误并重新提交,但是当输入有效文件时,它会显示" file"没有定义。它虽然在open_file函数中定义,但是返回值...那么为什么不打印?

3 个答案:

答案 0 :(得分:2)

file是类对象的名称。你应该用别的东西; 代码中的问题是您不保存函数的返回代码。

def open_file():
    while True:
            filename = input("Input a file name: ")
            try:
                f = open(filename,'r')
                return f
            except FileNotFoundError:
                print("Error: Enter a valid file.")
                continue

f = open_file()
for line in f:
    print(line)

您不需要else条款,因为您从未接触过它。如果没有异常,则从函数返回,如果有 - 则无论如何都不会执行else子句。

try ... except 语句有一个可选的 else 子句,如果存在,则必须遵循所有except子句。如果try子句 没有引发异常,那么必须执行的代码才有用。

你可以用更优雅的方式做同样的事情;

for line in open_file():
    print line

文件对象上使用for循环进行迭代的行为会逐行迭代文件。

答案 1 :(得分:1)

首先,不要将file用作变量。它是内置类型,如intstr。要打印从open_file返回的文件,您需要使用file.readlines()功能:

f = open_file()
for line in f.readlines():
    print(line)

open_file功能的改进:

def open_file():
    while True:
        try:
            return open(raw_input("Enter a file name: "), 'r')
        except FileNotFoundError:
            print("Error: Enter a valid file name.")

答案 2 :(得分:0)

fileopen_file函数的本地变量。因此,在功能之外不可用。您应该为返回值分配:

def open_file():
    while True:
        try:
            # ...
            return file
        except FileNotFoundError:
            # ...
        # no break needed; the return statement ends the function


file = open_file()
for line in file:
    print(line)