簡體   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