我正在编写一个使用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
中引用该返回值?
如何在这里进行更复杂的错误处理?
答案 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)
您可以使用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()