Python 出于某种原因,我的函数返回;没有;?为什么?

Python 出于某种原因,我的函数返回;没有;?为什么?,python,python-3.x,function,Python,Python 3.x,Function,为什么grepcut()不返回任何值 from termcolor import colored from subprocess import * def grepcut(inputRaw, grep, delimit, field): for line in inputRaw: if grep in line: output = line.split(delimit)[field] return output

为什么grepcut()不返回任何值

from termcolor import colored
from subprocess import *

def grepcut(inputRaw, grep, delimit, field):
    for line in inputRaw:
        if grep in line:
            output = line.split(delimit)[field]
            return output
        else:
            return None


def function():
    print(colored("[+] ", "green") + "Here we go!")
    inputRaw = Popen(["cat outputfile"], shell=True, stdout=PIPE, universal_newlines=True).communicate()[0].rstrip()
    var1 = grepcut(inputRaw, grep = 'grep this', field = 6, delimit = " ")
    var2 = grepcut(inputRaw, grep = 'grep this', field = 2, delimit = " ")
    print("\n")
    print(var1, var2)
    #if var1 or var2 is None:
    #   print(colored("[-] ", "red") + "Not found!!!")
    #else:
    #   print(var1, var2)

function()
顺便说一下,这是inputRaw的内容:

A B C D E F G
H I J grep此K L M N
O P Q R S T U

此代码的输出为:

None None

您的
grepcut
只检查第一行:如果匹配,则返回
output
,否则立即返回
None
,而不进行下一次迭代

您可能希望删除该
else
分支,并将
返回None
移动到
for
之后

def grepcut(inputRaw, grep, delimit, field):
    for line in inputRaw:
        if grep in line:
            output = line.split(delimit)[field]
            return output
    return None
您甚至可以省略
返回None
,因为在Python中,任何终止时没有显式
返回的函数都会返回
None
,不过我会保留它,以明确这不是疏忽,但如果没有找到任何内容,则该函数将返回
None


另外,您正在通过
Popen
调用
communicate()
,因此您得到的是字符串,而不是文件对象;因此,您不能像那样直接对其行进行迭代-对字符串进行迭代会对其字符进行迭代

如果
inputRaw
确实是一个字符串,则必须在换行符上拆分,如下所示:

def grepcut(inputRaw, grep, delimit, field):
    for line in inputRaw.split('\n'):
        if grep in line:
            output = line.split(delimit)[field]
            return output
    return None

仍然返回None。我不知道如何修复这个代码,我迷路了。@DonJhoe:我想重现这个问题,但是你的代码被破坏了。您缺少导入,并且在
Popen
行的末尾有一个额外的括号。发布实际的代码,否则我们哪儿也不去。@DonJhoe:我们开始了,填空,我想我发现了另一个错误。F5现在。我修复了丢失的零件。别忘了创建一个名为outputfile的文件,并更改其内容,使其与我的帖子相匹配。