簡體   English   中英

如何在 If 語句中退出/中斷 Python 自動化腳本(不在循環內)

[英]How to Exit/Break Python Automation Script in If Statement (Not inside a loop)

我正在嘗試運行一個程序,但該程序需要讀取配置文件。 此配置文件必須有一個基本目錄,它將從中讀取文件。 配置文件有幾個部分,用於與基本文件不同的子目錄。

最終,如果基本目錄不在配置文件中,我希望程序中斷腳本並返回錯誤消息。

這需要一個 If 語句。 但是 if 語句通常不會破壞腳本。 如何編寫一個 if 語句來破壞 function 從中讀取此配置文件的同時也會破壞腳本? 這個 function 將在另一個 function 內部使用

def process_dirconfig_file(config_file_from_sysarg):
    config = ConfigParser()
    config.read(config_file_from_sysarg)
    dirconfig_file_Pobj = Path(config_file_from_sysarg)
    if Path.is_file(dirconfig_file_Pobj):
        parseddict = {}
        for sect in config.sections():
            for k, v in config.items(sect):
                # print('{} = {}'.format(k, v))
                parseddict[k] = v
        print(parseddict)
        if ("base_dir" not in parseddict) or (parseddict["base_dir"] == ""):
            print(f"{Fore.RED} Error: Your config file is missing 'base directory' for file processing")
        elif("archive_dir" not in parseddict) or (parseddict["archive_dir"] == ""):
            print(f"{Fore.RED} Error: Your config file is missing 'archive directory' for file processing")
        elif ("error_dir" not in parseddict) or (parseddict["error_dir"] == ""):
            print(f"{Fore.RED} Error: Your config file is missing 'error directory' for file processing")
        elif ("empty_dir" not in parseddict) or (parseddict["empty_dir"] == ""):
            print(f"{Fore.RED} Error: Your config file is missing 'empty directory' for file processing")
    else:
        print(f"{Fore.RED} Error: No directory config file. Please create a config file of directories to be used in processing")

此 function 正在此 function 內部使用:

def odf_history_from_csv_to_dbtable(csvfile_path_list, db_instance):
    odfsdict = db_instance['odfs_tester_history']
    #table_row = {}
    totalresult_list = []
    process_dirconfig_file(dirconfig_file)
    for csv in csvfile_path_list:  # is there a faster way to compare the list of files in archive and history?
        if csv not in archivefiles_path_set:
            csvhistoryfilelist_to_dbtable(csv, db_instance)
            odfscsv_df = pd.read_csv(csv, header=None, names=['ODFS_LOG_FILENAME', 'ODFS_FILE_CREATE_DATETIME', 'LOT', 'TESTER', 'WAFER_SCRIBE'])
            odfscsv_df['CSV_FILENAME'] = csv.name #add csvfilename column to existing df
            result = odfscsv_df.to_sql('odfs_tester_history', con=odfsdict['engine'], if_exists='append', index=False)
            totalresult_list.append(result)


        else:
            print(csv.name + " is in archive folder already")
    #print (totalresult_list)
    return totalresult_list

db_instance = dbhandler()
odfs_tabletest_dict = db_instance['odfs_tester_history_files']

您可以使用這樣的結構:(基本異常處理)

如果有兩種方法:Caller(b) 和 Called(a)

def a(x):
try:
    if(x%2==0): raise Exception("Even Integer")
    else: raise Exception("Odd Integer")
except Exception as e:
    raise Exception(e)


def b():
    try:
        a(3)
    except Exception as e:
        print(e)
        
b()

回答:

Odd Integer

如果我正確理解您的問題,聽起來您應該使用 try/except 而不是 if 語句。 這將嘗試讀取代碼,除非遇到錯誤,在這種情況下它將停止代碼並返回該錯誤。

暫無
暫無

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

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