os.walk onerror函数返回到哪里?如何在onerror函数调用中添加更多参数?

时间:2018-12-15 01:11:49

标签: python os.walk

我正在编写一个使用os.walk遍历文件系统的程序。

我使用os.walk和onerror函数进行for循环,如下所示:

import numpy as np , pandas as pd

indices = [0,1,1,1,3,1,1,0,0,0,3]
data = np.arange(len(indices))

df = pd.DataFrame({"indices": indices, "data": data}) # Your DataFrame
df.head() # Take a look

    indices data
0   0   0
1   1   1
2   1   2
3   1   3
4   3   4
medians = df.groupby("indices").median()# median for each value of `indices`
medians  
        data
    indices 
    0   7.5
    1   3.0
    3   7.0

# Finding indices with no data point
desired_indices = pd.Series([0, 1, 10, -5, 2])
is_in_index = desired_indices.isin(medians.index)
has_no_data = desired_indices[~ is_in_index]
has_no_data
2    10
3    -5
4     2
dtype: int64

来自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) 函数的return语句去哪里?如何引用?我当然可以在onerror函数中执行print(os_error),它将正常工作。 但我想将该错误保存在某个地方。

我又如何将列表作为错误处理函数的参数添加,以便可以将该错误追加到失败目录的列表中?

例如:

walk_error

那很好用!但不幸的是,您似乎无法在def walk_error(os_error, list_of_errors): list_of_errors.append(os_error) 调用中使用多个参数来进行这种类型的函数调用。

或者我该如何将返回的值分配给变量以在我的主函数中执行此操作?该os_error被“返回”,但是没有返回给os.walk生成的3个元组中的任何一个。有没有办法在onerror中引用该返回值?

如何在这里进行更复杂的错误处理?

2 个答案:

答案 0 :(得分:3)

使用内部函数(也称为闭包):

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)

答案 1 :(得分:2)

您可以使用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()