繁体   English   中英

打印从函数返回的文件

[英]Print a returned file from a function

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

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)

它提示输入文件,并在输入无效文件时给出错误并重新提示,但是在输入有效文件时,它表示未定义“文件”。 它是在open_file函数中定义的,并且是返回值...那么为什么不打印呢?

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子句,因为您永远不会到达它。 如果没有异常,并且没有-从子句返回,则无论如何都不会执行。

try…except语句具有可选的else子句,该子句在存在时必须遵循所有except子句。 对于try子句 未引发异常的 必须执行的代码而言,很有用

您可以用更优雅的方式进行操作;

for line in open_file():
    print line

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

首先,不要将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.")

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM