Python 一个用于为文件中的每一行调用函数的行

Python 一个用于为文件中的每一行调用函数的行,python,file-io,Python,File Io,我需要为file.txt中的每一行不断调用sync,直到函数返回非零(即函数失败时)。目前,我计划做以下工作 for line in file("file.txt"): change=int(line) cp_success=sync(change) #check the return value of function sync if cp_success!=0 : break #Try us

我需要为
file.txt
中的每一行不断调用
sync
,直到函数返回非零(即函数失败时)。目前,我计划做以下工作

for line in file("file.txt"):
        change=int(line)
        cp_success=sync(change) #check the return value of function sync
        if cp_success!=0 : 
            break               #Try using a break statement
是否有更好的方法或一行?

好的,几乎是一行(如果您允许我导入):

with open(...) as fp: any(sync(line) for line in fp)
但你真的不应该模糊事物,所以为什么不:

with open("file") as fh:
    for line in fh:
        if not sync(int(line)) == 0:
            break

goto
语句?真的吗?为什么是一行呢?看起来python中没有goto…如果文件中有任何一行导致
cp\u成功
具有该值,那么它将进入无限循环0@Ignacio-你能解释一下上面所有的功能吗?如何检查函数“sync”的返回值?@user1927233:@IgnacioVazquez Abrams:我理解你的代码的功能。但我很好奇:是什么样的思维过程让你相信这就是OP想要的?我无法确认/否认这是他想要的,但我一直无法回答,因为他的代码在我脑海中无法“计算”。所以我想知道你是如何得出这个结论的(它/确实/似乎对OP有帮助)。@inspectorG4dget之所以有效,是因为它会对文件同步结果中的任何非虚假值短路…@inspectorG4dget:我几乎忽略了问题中的代码,因为它通常要么非常混乱,要么是X-Y问题的一部分。我阅读了问题的描述,并从中构造代码。
>>> import itertools
>>> def sync(n):
...   if n == 3: return -1 # error
...   return 0

>>> lines = [1, 2, 3, 4, 5, 6]
>>> [ x for x in itertools.takewhile(lambda x: sync(x) == 0, lines) ]
[1, 2]
with open("file") as fh:
    for line in fh:
        if not sync(int(line)) == 0:
            break