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

Python 在应用try/except后,读取文件函数只返回文件中的第一行,但程序在没有它的情况下按预期运行,python,python-3.x,Python,Python 3.x,好的,我的问题是我需要定义一个函数,它读取一个数字文件(假设文件中的所有内容都是数字),然后打印任何不能被3整除的奇数。我的教授特别要求在这个项目中尝试一下。 我的代码是 import sys def threething(name): try: file = open(name, 'r') except: sys.exit("Bad file name for some odd reason idk.") data = file.rea

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

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一起工作。

我怀疑
try
/
except
语句是否与行为的改变有关。我敢打赌,正如@theausome所指出的,您将
print(o)
替换为
returno
,但没有注意到

问题是,
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()
的返回:


返回o
更改为
打印(o)
并删除
打印
周围
三件事(文件名)
。谢谢!这很有效,谢谢。谢谢!这非常有效。虽然我仍然不明白为什么我用“returno”和“print(threething(filename))”的方式编写程序,只给了我文本文件中的第一行。是的,你是对的,我没有思考就返回了o:p@JosephLastname一开始确实会让人困惑!我在我的答案中添加了更多的内容,我希望它能帮助你理解更多。非常感谢,这帮助我理解了我没有得到的东西,并且诚实地说,它解决了我遇到的很多问题。
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)