簡體   English   中英

在Python中解析一條語句,以便在發生錯誤時重新啟動該過程

[英]resolve a statement in Python in order to restart the procedure when an error occurs

我用Python編寫了此語句(用於將程序轉換為可執行文件),以便將所有文本文件加載到文件夾(* .txt)或單個文本文件中,檢查數據格式是否正確( get_parsecheck_header )並進行處理數據。 如果數據格式不正確,程序將要求重新啟動( doit = raw_input("Continue (Y/N)?[Y]: " )。在第一種情況(* .txt)中,如果數據格式不正確(定界符) '。'並且在第一行顯示Header),程序將報告錯誤並從INPUT = raw_input("Input (*.txt): ")重新啟動(如果按下Y INPUT = raw_input("Input (*.txt): ") 。在第二種情況下(加載單個文本文件)如果數據格式不正確,程序將關閉。

我也希望為單個加載文本文件提供選擇,讓用戶從INPUT = raw_input("Input (*.txt): )重新啟動程序

while True:
    INPUT = raw_input("Input (*.txt): ")
    if os.path.split(INPUT)[1] == "*.txt":
        file_list = glob.glob(os.path.join(os.path.split(INPUT)[0], '*.txt'))
        for file in file_list:
            file_head, file_tail = os.path.split(file)
            file_root, file_suffix = os.path.splitext(file_tail)
            try:
                parse = get_parse(file)
            except Exception:
                print ValueError("%s has delimiter type not valid" % file_tail)
                raw_input("press any key to exit")
                print "Exiting..."
                break
            if check_header(file):
                print ValueError("%s has an Header" % file_tail)
                raw_input("press any key to exit")
                print "Exiting..."
                break
                # do other stuff
        doit = raw_input("Continue (Y/N)?[Y]: ")
        if doit == 'N'or doit == 'n':
            print "Exiting....."
            break
    else:
        try:
            parse = get_parse(INPUT)
        except Exception:
            print ValueError("Delimiter type not valid")
            raw_input("press any key to exit")
            print "Exiting..."
            break
        if check_header(INPUT):
            print ValueError("Header is not valid")
            raw_input("press any key to exit")
            print "Exiting..."
            break
        # do other stuff
        doit = raw_input("Continue (Y/N)?[Y]: ")
        if doit == 'N'or doit == 'n':
            print "Exiting....."
            break

在第二種情況下,使用Windows的命令提示符是文本文件不正確

Input (*.txt): C:\test.txt
Delimiter type not valid
press any key to exit
Exiting.....

C:\Users\>

在第一種情況下(* .txt)

Input (*.txt): C:\*.txt
Area1_1.txt has delimiter type not valid
press any key to exit
Exiting...
Continue (Y/N)?[Y]:

您的問題仍然不清楚,但是我認為如果您的目標是在發生錯誤后重新啟動循環,則您想使用continue而不是break 另外,您應該以不同的方式處理異常:

<snip>
else:
    try:
        parse = get_parse(INPUT)
    except ValueError:
        print "Delimiter type not valid"
        print "Try again..."
        continue
    if check_header(INPUT):
        print "Header is not valid"
        print "Try again..."
        continue
    # do other stuff
    doit = raw_input("Continue (Y/N)?[Y]: ")
    if doit == 'N'or doit == 'n':
        print "Exiting....."
        break

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM