[英]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)
您可以使用lambda
或functools.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.