【问题标题】:"return" outside function - Python [closed]“返回”外部函数 - Python [关闭]
【发布时间】:2014-02-03 18:49:51
【问题描述】:

我遇到了这个功能的问题。 当我尝试运行代码时,在函数外弹出一条消息'return'。

谢谢。

def find_details(id2find):
    surfistas_f = open("surfing_data.csv")
    for each_line in surfistas_f:
        s={}
        (s['id'], s['nome'],s['pais'],s['media'],s['prancha'],s['idade'])= each_line.split(";")
        if id2find == int(s['id']):
            surfistas_f.close()
            return(s)
surfistas_f.close()
return({})

lookup_id=int(input(" Entre com a identificação do surfista: "))
surfer = find_details(lookup_id)

if surfer:
    print("ID:           " + surfer['id'])
    print("Nome:         " + surfer['nome'])
    print("País:         " + surfer['pais'])
    print("Média:        " + surfer['media'])
    print("Prancha:      " + surfer['prancha'])
    print("Idade:        " + surfer['idade']) 

【问题讨论】:

  • 文件关闭和返回语句缩进错误。

标签: python function return


【解决方案1】:

return({}) 在函数 find_details 之外。你只需要缩进它,就像这样:

def find_details(id2find):
    surfistas_f = open("surfing_data.csv")
    for each_line in surfistas_f:
        s={}
        (s['id'], s['nome'],s['pais'],s['media'],s['prancha'],s['idade'])= each_line.split(";")
        if id2find == int(s['id']):
            surfistas_f.close()
            return(s)
    surfistas_f.close()
    return({})

lookup_id=int(input(" Entre com a identificação do surfista: "))
surfer = find_details(lookup_id)

if surfer:
    print("ID:           " + surfer['id'])
    print("Nome:         " + surfer['nome'])
    print("País:         " + surfer['pais'])
    print("Média:        " + surfer['media'])
    print("Prancha:      " + surfer['prancha'])
    print("Idade:        " + surfer['idade']) 

【讨论】:

  • 对!谢谢,格齐姆。我已经习惯了缩进。
【解决方案2】:

空格和缩进在 Python 中非常重要。 Python 不像其他语言那样使用大括号,因此它识别哪些行是通过缩进的一部分的方式。比如这个简单的函数:

def print_nums(num):
    for i in range(num):
        print(i)

如果 Python 使用大括号,可以这样想(我一想到就不寒而栗):

def print_nums(num): 
{
    for i in range(num): 
    {
        print(i)
    }
}

如果我们把这个方法改成:

def print_nums(num):
        for i in range(num):
        print(i)

如括号所示:

def print_nums(num): 
{
        for i in range(num):
        {
        }
        print(i)
}

因此,确保所有内容都正确缩进在 Python 中非常重要。因此,特别是对于您的方法返回缩进到与方法名称相同的级别,这意味着 Python 解释器会认为它在方法之外。您不能在方法/函数之外使用关键字return,这就是您看到所看到错误的原因。但是,如果您最后使用 print() 或其他名称,您会看到一些意想不到的结果。

我还建议使用 Python 的 with 语句打开文件,它会为您处理关闭和打开文件:

with open('surfing_data.csv') as sufista_s:
    do_stuff()

【讨论】:

  • 对。感谢您的回复!
【解决方案3】:

请注意代码格式。 在这 2 行之前你需要 4 个额外的空间:

surfistas_f.close()
return({})

【讨论】:

  • 更准确地说,它需要与上面的行具有相同的缩进。
  • 根据 PEP8,空格优先于制表符。 python.org/dev/peps/pep-0008/#tabs-or-spaces
  • @Kroltan:1 个选项卡在 Python 3 中会是 SyntaxError,因为其余代码使用空格。
  • @Wooble 你是对的,它一直都是这样做的。我只是想将制表符转换为空格。
  • @Kroltan:随意成为第 100 个左右尝试更改 PEP 8 的人...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 2012-12-11
  • 2013-12-18
相关资源
最近更新 更多