【问题标题】:docstring causes the function to not be defineddocstring 导致函数未定义
【发布时间】:2018-08-31 00:00:35
【问题描述】:

我无法弄清楚为什么我的代码在包含 Docstring 时会失败,特别是在函数 select_level(): 上 但是,如果我删除 Docstring 并注释掉它,它可以正常工作 如果我包含 Docstring,我会在终端上收到以下错误:

(NameError: name 'select_level' is not defined)

def select_level():
    """Defines how a player selects a difficulty, selects questions 
       and answers depending on user input,outputs selections.
    """
    print ("Ready Player One! Select a level.")
    level_name = raw_input("Type in easy, medium or hard\n").lower()
    if level_name=="easy":
        level(easy_level, blanks, easy_answers)
    elif level_name=="medium":
        level(medium_level, blanks, medium_answers)
    elif level_name=="hard":
        level(hard_level, blanks, hard_answers)
    else:
        print ("Please select easy, medium or hard")
    print select_level()

【问题讨论】:

  • 这不是文档字符串,而是缩进
  • 这对我来说很好。确保您没有在缩进中混合制表符和空格。
  • PM 2Ring 感谢您的建议,我回去并确保重写我的代码并确保我只使用选项卡,它现在正在工作,再次感谢!
  • @user10108802 备案;建议使用(通常 4 个)空格来缩进 Python 代码。您可以将大多数编辑器配置为将Tab 键的一次击键转换为四个空格。

标签: python string


【解决方案1】:

您的问题很可能是缩进。你的代码中有多个函数吗?如果是这样,请确保 select_level 函数没有嵌套在另一个函数中。我无法重现您提供的运行代码的错误。但是当我将你的函数嵌套在另一个这样的函数中时:

def my_other_function():
  print "This is my other function"

  def select_level():
    """Defines how a player selects a diffuclity, selects questions 
      and answers depending on user input,outputs selections.
    """
  print ("Ready Player One! Select a level.")
  level_name = raw_input("Type in easy, medium or hard\n").lower()
  if level_name=="easy":
      level(easy_level, blanks, easy_answers)
  elif level_name=="medium":
      level(medium_level, blanks, medium_answers)
  elif level_name=="hard":
      level(hard_level, blanks, hard_answers)
  else:
      print ("Please select easy, medium or hard")

然后尝试调用 select_level 函数,它会因您遇到的相同错误而中断。看看第二个函数比第一个函数缩进得更远吗?这是导致错误的原因。

因为该函数嵌套在另一个函数中,所以它超出了范围。有关 python 范围的更多信息,give this page a read

此外,您提供的代码示例还有另外两个问题。

  1. 删除代码最后一行的缩进。所以它看起来像这样:

    def select_level():
      """Defines how a player selects a diffuclity, selects questions 
      and answers depending on user input,outputs selections.
      """
      print ("Ready Player One! Select a level.")
      level_name = raw_input("Type in easy, medium or hard\n").lower()
      if level_name=="easy":
        level(easy_level, blanks, easy_answers)
      elif level_name=="medium":
        level(medium_level, blanks, medium_answers)
      elif level_name=="hard":
        level(hard_level, blanks, hard_answers)
      else:
        print ("Please select easy, medium or hard")
    print select_level()
    
  2. 当您在函数上使用 print 语句时,它会尝试打印返回值。您的函数没有返回值,因此您根本不需要 print 语句。删除它,使您的代码如下所示:

    def select_level():
      """Defines how a player selects a diffuclity, selects questions 
      and answers depending on user input,outputs selections.
      """
      print ("Ready Player One! Select a level.")
      level_name = raw_input("Type in easy, medium or hard\n").lower()
      if level_name=="easy":
        level(easy_level, blanks, easy_answers)
      elif level_name=="medium":
        level(medium_level, blanks, medium_answers)
      elif level_name=="hard":
        level(hard_level, blanks, hard_answers)
      else:
        print ("Please select easy, medium or hard")
    select_level()
    

【讨论】:

    【解决方案2】:

    我有几点建议:

    确保 select_level() 被正确调用并且确实已定义。

    我问是因为它说

    (The error says (NameError: name 'select_level' is not defined).
    

    另外,您是否尝试过在最后一行添加括号?

    print(select_level())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-27
      • 2019-02-15
      • 2019-08-09
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多