【问题标题】:Return values when recalling a function within a function在函数中调用函数时返回值
【发布时间】:2018-03-16 21:01:00
【问题描述】:

正在开发一个程序,以可视化田地中植物的生长。调用一个函数,在此处输入代码返回一个值,如下所示:

Field = InitialiseField()

然后是函数:

def InitialiseField(): #function that gives the user a choice of creating a blank field or loading a text file
  def validate():
      Response = input('Do you want to load a file with seed positions? (Y/N): ')
      if Response.upper() == 'Y':
        Field = ReadFile() #creates a multidimensional array based on an external text file
        return Field
      elif Response.upper() == 'N':
        Field = CreateNewField() #generates new field with a single seed
        return Field
      else:
          print('Please enter either N/n or Y/y')
          validate()

  return validate() #return the updated field

当用户输入有效响应(N/n 或 Y/y)时,程序会继续按预期运行。但是,当用户输入无效响应然后输入有效响应后 InitialiseField() 函数返回 NoneType 对象而不是第二个响应?

当用户输入无效响应时,将调用 validate() 函数,我假设它在完成后从第一个循环返回 NoneType 对象,然后第二个循环返回正确的值 - 我该如何解决这个问题?

TypeError: 'NoneType' object is not subscriptable

【问题讨论】:

  • 为什么将validate 包裹在InitialiseField 中?是否在这些函数之外定义了任何变量集?
  • masterfloda 对生存问题有正确的答案 v,但实际上这不是对递归的适当使用。循环直到你得到一个值输入;这也将避免对嵌套函数的需要。

标签: python python-3.x function return


【解决方案1】:

你在你的问题标题中有答案:-)你需要returnvalidate()的值:

      print('Please enter either N/n or Y/y')
      return validate()

如果你不这样做,你的方法不会返回任何东西,结果为is None

另外,您可能想阅读Python Styleguide:函数使用小写字符。

【讨论】:

  • 嗯,是的,有道理,谢谢!关于样式 - 我知道,但这个项目是基于考试委员会提供的一些 A Level 样本文件,他们使用了不正确的样式,我们必须使用它!
猜你喜欢
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多