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,我发现了错误。如果我有足够的声誉,我会支持你的回答。