我在Python 2.7中使用py2exe在可执行文件中转换了一个脚本。 INPUT数据是一个文本文件,其中分隔符必须在此函数后有效:
# Check if delimeter is valid
def get_parse(filename, delimiters=['\t', ',', ' ', ':', ';', '-']):
with open(filename) as f:
f.next()
secondline = f.next()
for delimiter in delimiters:
if len(secondline.rstrip().split(delimiter)) >= 3:
return delimiter
raise Exception("couldn't find a delimiter that worked!")
当分隔符无效时(例如:点)我正在以Python优雅的方式寻找两个解决方案:
或
INPUT = raw_input("Input (*.txt): ")
while not os.path.exists(INPUT):
print IOError("No such file or directory: %s" % INPUT)
INPUT = raw_input("Input (*.txt): ")
try:
parse = get_parse(INPUT)
except Exception:
print ValueError("Delimiter type not valid")
break
OUTPUT = raw_input("Output (*.txt): ")
使用此解决方案(中断)我的* .exe文件的窗口关闭,让用户无需解释
答案 0 :(得分:1)
您可以使用sys.excepthook
为未捕获的异常挂钩异常处理程序,并根据raw_input()
将其调用input()
(或3.x中的this answer)。
快速举例:
import sys
def wait_on_uncaught_exception(type, value, traceback):
print 'My Error Information'
print 'Type:', type
print 'Value:', value
print 'Traceback:', traceback
raw_input("Press any key to exit...")
sys.excepthook=wait_on_uncaught_exception
只需修改它以获得任何输出或任何你想要的东西(我建议查看traceback
模块)。
但是,如果您希望它更具体地针对您的代码,那么只需将raw_input("Press any key to exit...")
放入您已有的解决方案中,它应该没问题。以上应该提供更一般的解决方案。
答案 1 :(得分:1)
您并没有真正搜索分隔符,只是字符串中的字符。你应该真的使用CSV模块。
from __future__ import print_function
delimiters=['\t', ',', ' ', ':', ';', '-']
def getfile():
fname =""
while fname is "":
fname = str.lower(raw_input("Input(*.txt): "))
while fname.endswith(".txt") is not True:
print ("File must be .txt")
fname = str.lower(raw_input("Input(*.txt): "))
if fname.endswith(".txt"):
try:
with open(fname,'rb') as f:
parsed = False
while not parsed:
data = f.readline()
for d in delimiters:
if d in data:
print ("Delimiter: {0} found".format(d))
parsed = True
# do your additional stuff here
else:
print ("Unable to find delimiter {0}".format(d))
parsed = True
except IOError as e:
print( "Error: ", e)
getfile()