簡體   English   中英

os.walk onerror的函數返回到哪里?如何為onerror函數調用添加更多參數?

[英]Where does the function for os.walk onerror return to? How do I add more arguments to the onerror function call?

我正在編寫一個程序來使用os.walk來運行文件系統。

我有使用os.walk的for循環,以及onerror函數如下:

def walk_error(os_error):

    return(os_error)

def main():

    for root, dirs, files in os.walk('/var/spool/cron/', onerror=walk_error):

    print(root, dirs, files)

onerror函數返回語句到哪里去了? 我該如何參考? 我當然可以在我的walk_error函數中執行print(os_error) ,它可以正常工作。 但我想在某處保存該錯誤。

我如何將一個列表作為參數添加到錯誤處理函數中,所以我可以將該錯誤附加到我的失敗目錄列表中?

例如:

def walk_error(os_error, list_of_errors):
    list_of_errors.append(os_error)

那會很棒! 但不幸的是,你似乎無法在onerror調用中使用多個參數進行這種類型的函數調用。

或者我如何將返回值分配給變量以在我的main函數中執行此操作? os_error正在“返回”但它沒有返回到os.walk生成的3個元組中的任何一個。 有沒有辦法在main()引用返回的值?

我如何在這里進行更復雜的錯誤處理?

使用內部函數(也稱為閉包):

def main():

    list_of_errors = []

    def walk_error(os_error):
        list_of_errors.append(os_error)

    for root, dirs, files in os.walk('/var/spool/cron/', onerror=walk_error):
        print(root, dirs, files)

您可以使用lambdafunctools.partial來實現多參數onerror函數。

def walk_error(os_error, list_of_errors):
    list_of_errors.append(os_error)

some_list = []

for root, dirs, files in os.walk("some/path", onerror=lambda err: walk_error(err, some_list):
    do_stuff()

要么

import functools

...  # as above

for root, dirs, files in os.walk("some/path", onerror=functools.partial(walk_error, list_of_errors=some_list)):
    do_stuff()

暫無
暫無

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

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