Python 在应用try/except后,读取文件函数只返回文件中的第一行,但程序在没有它的情况下按预期运行
好的,我的问题是我需要定义一个函数,它读取一个数字文件(假设文件中的所有内容都是数字),然后打印任何不能被3整除的奇数。我的教授特别要求在这个项目中尝试一下。 我的代码是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
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)