名称错误:名称';表格';未定义(Python3)

名称错误:名称';表格';未定义(Python3),python,error-handling,Python,Error Handling,基本上,main方法接受用户输入,检查它,如果用户没有输入quit,则调用first方法 first方法检查输入的第一部分,并根据用户输入的内容调用其他方法之一。这是我得到一个错误的点;例如,当first方法调用form方法时,我得到一个NameError:name'form'未定义异常。我对此有点困惑,因为我已经定义了每个方法,并且它们都拼写正确,而且当我调用quit方法时,它工作得非常好 主要方法: if __name__ == '__main__': for line in

基本上,
main
方法接受用户输入,检查它,如果用户没有输入
quit
,则调用
first
方法

first
方法检查输入的第一部分,并根据用户输入的内容调用其他方法之一。这是我得到一个错误的点;例如,当
first
方法调用
form
方法时,我得到一个
NameError:name'form'未定义
异常。我对此有点困惑,因为我已经定义了每个方法,并且它们都拼写正确,而且当我调用
quit
方法时,它工作得非常好

主要方法:

if __name__ == '__main__':
        for line in sys.stdin:
                s = line.strip()
                if not s: break
                if (str(s) == "quit"): quit()
                elif (str(s) == "quit") == False:
                        a = s.split()
                        print(a)
                        if (len(a) is 2): first(a)
                        elif (len(a) is 3): first(a)
                        else: print("Invalid Input. Please Re-enter.")
第一种方法:

def first(a = list()):
        word = a[0]

        if word == "ls":
                ls(a[1])           
        elif word == "format":
                form(a[1])
        elif word == "reconnect":
                reconnect(a[1])
        elif word == "mkfile":
                mkfile(a[1])
        elif word == "mkdir":
                mkdir(a[1])
        elif word == "append":
                append(a[1], a[2])                               
        elif word == "delfile":
                delfile(a[1])
        elif word == "deldir":
                deldir(a[1])
        else:
                print("Invalid Prompt. Please Re-enter.")
def reconnect(one = ""):
        print("Reconnect")

def ls(one = ""):
        print("list")

def mkfile(one = ""):
        print("make file")

def mkdir(one = ""):
        print("make drive")

def append(one = "", two = ""):
        print("append")

def form(one = ""):
        print("format " + one)

def delfile(one = ""):
        print("delete file")

def deldir(one = ""):
        print("delete directory")

def quit():
        print("quit")
        sys.exit(0)
其他方法(这些都是从第一个方法调用的):


这取决于您是使用Python2.7还是3,但是您的代码需要做一些小的修改

import sys
def reconnect(one=""):
    print("Reconnect")

def ls(one=""):
    print("list")

def mkfile(one=""):
    print("make file")

def mkdir(one=""):
    print("make drive")

def append(one="", two=""):
    print("append")

def form(one=""):
    print("format " + one)

def delfile(one=""):
    print("delete file")

def deldir(one=""):
    print("delete directory")

def quit():
    print("quit")
    sys.exit(0)

def first(a=list()):
    word = a[0]

    if word == "ls":
        ls(a[1])
    elif word == "format":
        form(a[1])
    elif word == "reconnect":
        reconnect(a[1])
    elif word == "mkfile":
        mkfile(a[1])
    elif word == "mkdir":
        mkdir(a[1])
    elif word == "append":
        append(a[1], a[2])
    elif word == "delfile":
        delfile(a[1])
    elif word == "deldir":
        deldir(a[1])
    else:
        print("Invalid Prompt. Please Re-enter.")

line = raw_input("Some input please: ")  # or `input("Some...` in python 3

print(line)
s = line.strip()

if (str(s) == "quit"):
    quit()
elif (str(s) == "quit") == False:
    a = s.split()
    print(a)
    if (len(a) is 2):
        first(a)
    elif (len(a) is 3):
        first(a)
    else:
        print("Invalid Input. Please Re-enter.")
试验

你也可以试试


此错误是由于

    elif word == "format":
            form(a[1])
python基本上不知道什么是表单

让我告诉你:

gaf@$[09:21:56]~> python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> form()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'form' is not defined
>>>
命令

秩序也很重要

try:
    form()
except NameError:
    print('Oops name error raise above')


def form():
    print('form foo is called')

try:
    form()
except NameError:
    print('Oops name error raise below')
我会给你

/home/gaf/dashboard/bin/python /home/gaf/PycharmProjects/dashboard/test.py
Oops name error raise above
form foo is called

Process finished with exit code 0
附言。 看看pep8 你的代码乱七八糟
但是不用担心,这是每个人使用第一语言时都会做的事情

你确定你在调用这些方法之前定义了它们吗?是的,我已经按照与我发布的相反的顺序定义了所有方法。我也尝试过交换订单。try-form(one=a[1])@SumanKalyan没有work@GabbyFreeland请在此处尝试。您可以编写
格式a
,它会调用表单function@GabbyFreeland我用截图更新了问题。请查看提供的屏幕截图。显然,它运行了
表单
函数。好吧,这很奇怪。我只是编辑了我的,当它在一个类中时,它就不起作用了,但是当你去掉这个类,保持其他的一切不变时,它就起作用了。你知道为什么吗?
import 
try:
    form()
except NameError:
    print('Oops name error raise above')


def form():
    print('form foo is called')

try:
    form()
except NameError:
    print('Oops name error raise below')
/home/gaf/dashboard/bin/python /home/gaf/PycharmProjects/dashboard/test.py
Oops name error raise above
form foo is called

Process finished with exit code 0