在应用try/except后,读取文件函数只返回文件中的第一行,但程序在没有i的情况下按预期工作

2024-10-01 04:48:10 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我的问题是,我需要定义一个函数,它读取一个数字文件(假设文件中的所有内容都是数字),然后打印任何不能被3整除的奇数。我的教授特别要求在这个程序中进行try/except。 我的代码是

import sys

def threething(name):
    try:
        file = open(name, 'r')
    except:
        sys.exit("Bad file name for some odd reason idk.")
    data = file.readlines()
    for line in data:
        o = int(line)
        if o % 2 == 1:
            if o % 3 != 0:
                return o
    file.close()
filename = input("file name pls: ")
print(threething(filename))

而我使用的文本文件刚刚

1
2
3
4
5
6
7
8
9

在里面。之前,我的代码在没有try/except的情况下运行良好,并按预期打印了1、5和7,但我似乎不知道如何使用try/except


Tags: 文件代码namefordataif定义sys
1条回答
网友
1楼 · 发布于 2024-10-01 04:48:10

我怀疑try/except语句与行为的改变有任何关系。我敢打赌,正如@theausome所指出的,您在没有注意到的情况下用return o替换了print(o)

问题是return语句会中断函数的执行。作为一个简化的例子,考虑下面的代码:

def f():
    print("returning 1")
    return 1
    print("returning 2")
    return 2
    print("returning 3")
    return 3

print(f())

如果调用它,将得到以下输出:

returning 1
1

为什么它只执行函数的第一个print()?因为在返回之后,函数停止执行。因此,当您返回时,没有检查其他值,只有第一个值被赋予了print函数

尝试使用print(o)而不是return o。在这种情况下,您不需要打印threething()的返回:

import sys

def threething(name):
    try:
        file = open(name, 'r')
    except:
        sys.exit("Bad file name for some odd reason idk.")
    data = file.readlines()
    for line in data:
        o = int(line)
        if o % 2 == 1:
            if o % 3 != 0:
                print(o)
    file.close()
filename = input("file name pls: ")
threething(filename)

相关问题 更多 >