for os.walk onerror return 的函数去哪儿了?如何向 onerror 函数调用添加更多参数?
Where does the function for os.walk onerror return to? How do I add more arguments to the onerror function call?
我正在编写一个程序来使用 os.walk 遍历文件系统。
我的 for 循环使用 os.walk,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
函数中的 return 语句去哪里了?我如何引用它?我当然可以在我的 walk_error
函数中执行 print(os_error)
,它会正常工作。
但我想将该错误保存在某处。
比如说,我如何将一个列表作为参数添加到错误处理函数中,以便我可以将该错误附加到失败目录的列表中?
例如:
def walk_error(os_error, list_of_errors):
list_of_errors.append(os_error)
那就太好了!但不幸的是,您似乎无法在 onerror
调用中使用多个参数进行这种类型的函数调用。
或者我如何将 returned 值分配给变量以在我的主函数中执行此操作? os_error 被 "returned" 但它没有被 return 编辑到 os.walk 生成的 3 个元组中的任何一个。有没有办法在 main()
中引用 returned 值?
如何在这里进行更复杂的错误处理?
使用内部函数(又名闭包):
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()
我正在编写一个程序来使用 os.walk 遍历文件系统。
我的 for 循环使用 os.walk,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
函数中的 return 语句去哪里了?我如何引用它?我当然可以在我的 walk_error
函数中执行 print(os_error)
,它会正常工作。
但我想将该错误保存在某处。
比如说,我如何将一个列表作为参数添加到错误处理函数中,以便我可以将该错误附加到失败目录的列表中?
例如:
def walk_error(os_error, list_of_errors):
list_of_errors.append(os_error)
那就太好了!但不幸的是,您似乎无法在 onerror
调用中使用多个参数进行这种类型的函数调用。
或者我如何将 returned 值分配给变量以在我的主函数中执行此操作? os_error 被 "returned" 但它没有被 return 编辑到 os.walk 生成的 3 个元组中的任何一个。有没有办法在 main()
中引用 returned 值?
如何在这里进行更复杂的错误处理?
使用内部函数(又名闭包):
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()