Как удалить неиспользуемые параметры функции в shutil.rmtree
В этом вопросе представлен ответ о том, как удалить файлы, доступные только для чтения. Это супер эффективно, но требует наличия неиспользуемых параметров. В этом другом вопросе был задан вопрос, как сообщить Pylint о том, что несколько несмежных параметров не используются, без добавления конкретного комментария (например, с помощью _
). Многие из ответов были примерно "ЗОМГ, КОТОРЫЙ ВЫ ДЕЙСТВУЕТЕ НЕПРАВИЛЬНО", поэтому я пообещал, что приведу пример, где это необходимо и вне моего контроля. Вот этот пример.
shutil.rmtree(self._temp_dir, onerror=del_rw)
def del_rw(action, name, exc):
os.chmod(name, stat.S_IWRITE)
os.remove(name)
"Ответ", чтобы пилинт не жаловался на action
а также exc
это к
shutil.rmtree(self._temp_dir, onerror=del_rw)
def del_rw(_action, name, _exc):
os.chmod(name, stat.S_IWRITE)
os.remove(name)
но новый вопрос, как это сделать, не имея _action
или же _exc
как параметры?
1 ответ
Как обсуждалось в комментариях, вы не можете просто игнорировать action
, а также exc
так как rmtree
передаст эти аргументы в обратный вызов. Из документации по питону:
Если
onerror
предоставляется, это должен быть вызываемый, который принимает три параметра:function
,path
, а такжеexcinfo
,
При этом у вас есть несколько вариантов:
Вы можете добавить к обратному вызову
cb_
(см. также документ pylint), превращая вашу функцию в:shutil.rmtree(self._temp_dir, onerror=cb_del_rw) def cb_del_rw(action, name, exc): os.chmod(name, stat.S_IWRITE) os.remove(name)
Вы можете использовать ключевые аргументы (вы также можете использовать
*args
, но я считаю этот подход более читабельным):shutil.rmtree(self._temp_dir, onerror=del_rw) def del_rw(**kwargs): name = kwargs['name'] os.chmod(name, stat.S_IWRITE) os.remove(name)