Python 程序未打印预期的异常

Python 程序未打印预期的异常,python,python-2.7,exception,exception-handling,user-input,Python,Python 2.7,Exception,Exception Handling,User Input,我正在开发一个程序,该程序将从文件中提取文本,如下所示: NAME OF PROGRAM: text.txt CONTENTS OF FILE: 1: 101010100101010101 1010010101010101 101010101010101 2: 0101010101 1010011010 10101010 10101010 10101010 3: 0001000101010 10101010 10101010 1010101010 10101 START LIN

我正在开发一个程序,该程序将从文件中提取文本,如下所示:

NAME OF PROGRAM: text.txt

CONTENTS OF FILE:

  1: 101010100101010101 1010010101010101 101010101010101
  2: 0101010101 1010011010 10101010 10101010 10101010
  3: 0001000101010 10101010 10101010 1010101010 10101

START LINE: 1
END LINE: 2

results.txt generated.
我在程序将要求程序名的部分,我计划在程序名长度为零时使用异常

程序应该像这样运行:

NAME OF PROGRAM: 

THE NAME OF THE PROGRAM SHOULD NOT BE LESS THAN 1! [LEN_ERROR]
但程序的运行方式如下:

NAME OF PROGRAM:
THERE'S SOMETHING WRONG WITH YOUR INPUT! [INP_ERROR]
代码如下:

class Program:
    """
      Author       : Alexander B. Falgui (alexbfalgui.github.io)
      Program Name : Text Extractor
      Description  : Takes an integer or string as an input and generates a
      text file with the extracted data. 

      Note: This program can be used, shared, modified by anyone.
    """

    def __init__(self):
        self.menu_file_loc = "menu"
        return self.load_files()

    def load_files(self):
        #self.menu_file = open(self.menu_file_loc)
        #self.read_mf = self.menu_file.read()

        return self.main_menu()

    def main_menu(self):
        #print(self.read_mf)
        print("""  [1] Extract Data\n  [2] Exit""")

        while (True):
            try:
              self.menu_input = input("CHOOSE AN OPTION> ")
              if (self.menu_input == 1):
                  try:
                    self.program_name = raw_input("\nNAME OF THE PROGRAM: ")
                    self.program_name = open(self.program_name)
                  except IOError:
                    if (len(program_name) == 0):
                      print("THE NAME OF THE PROGRAM SHOULD NOT BE LESS THAN"),
                      print(" 1! [LEN_ERROR]")

                    print("%s does not exist" % self.program_name)
              elif (self.menu_input == 0):
                  print("\n")
                  break

            except SyntaxError:
                continue
            except NameError:
                print("SOMETHING'S WRONG WITH YOUR INPUT. [INP_ERROR]\n")

# Run the program
Program()

为什么程序打印了错误的异常?我能做些什么来修复它呢?

请不要做
,除了语法错误:continue
,因为您将默默地检查任何类型的语法错误

要获得有关出错原因的更多信息,您应该
除了namererror as e
进行进一步调查。另见

您应该将除NameError之外的
部分更改为以下内容:

        except NameError as e:
            print e
            print("SOMETHING'S WRONG WITH YOUR INPUT. [INP_ERROR]\n")

您将看到真正的问题所在。

我不确定您为什么在末尾添加了这两个异常处理程序,但您得到了一个名称异常,因为您引用的是程序名变量,而不是self.program\u名


将您的行
if(len(program\u name)==0):
更改为
if(len(self.program\u name)==0):
应该可以工作。

这甚至可以尝试回答问题吗?你只是做了一个评论,引用了一个没有任何解释的外部来源。我在答案中包含了外部来源的相关部分。我同意这个答案几乎可以作为一个评论,我认为它更适合作为一个评论。你没有回答这个问题。我做了,但显然是错的,所以我删除了它=)。在国际海事组织,只有更正和解释才能回答。如果你只是有一个解决问题的想法,那就是一个评论。老实说,我不知道,这是一个“在我的代码中找到一个bug”的问题,所以也许想法也可以作为答案,因为如果bug不明显,要写出一个好的答案是非常困难的。@user3839951“你没有告诉我读什么”——如果有疑问,请全部阅读。但请看我更新的答案。在第32行,我测试了长度
program\u name
,而不是
self.program\u name
。我按照你的建议修改了
除了namererror
,正如你所说的那样,并立即发现错误,即
程序名未定义。你使用的是python 2还是python 3?因为在Py3中,没有
原始输入
,这可能是引发的
名称错误
。我使用的是Python 2.7,操作系统是Debian 7.5 Wheezy。我正在以
python program_name.py
的形式通过终端键入来运行该程序,这解决了问题,但由于@Jasper,我发现了错误。如果我有足够的声誉,我会支持你的回答。