python - 函数在空序列上失败

标签 python

我试图根据我无耻地在此站点上找到的一些 Python 代码来查找目录中最新文件的日期。

def newest_file_in_tree(rootfnewer, extension=".avi"):
    return max(
        (os.path.join(dirname, filename)
        for dirname, dirnames, filenames in os.walk(rootfnewer)
        for filename in filenames
        if filename.endswith(extension)),
        key=lambda fn: os.stat(fn).st_mtime)

这有效,但在空目录上失败。

    key=lambda fn: os.stat(fn).st_mtime)
ValueError: max() arg is an empty sequence

我承认我是一个 Python 初学者,最后一行远远超出了我的工资等级。

谁能建议我如何捕获错误并防止函数崩溃?

最佳答案

max有一个 default 关键字:

m = max([], key=lambda x: abs(x), default='empty...')
print(m) # 'empty...'

如果 iterable 为空,将返回 default。如果没有 default,这将引发 ValueError


另一种方法是使用 glob为了列出文件:

import os
from glob import glob

def newest_file_in_tree(rootdir, ext='.avi'):
    glob_wildcard = os.path.join(rootdir, '**/*{}'.format(ext))
    glob_gen = glob(glob_wildcard, recursive=True)
    return max(glob_gen, key=lambda fn: os.stat(fn).st_mtime, default='?')

或使用 pathlib 更简洁:

from pathlib import Path

def newest_file_in_tree(rootpath, ext='.avi'):
    return max(Path(rootpath).glob('**/*{}'.format(ext)),
               key=lambda pth: pth.stat().st_mtime, default='?')

关于python - 函数在空序列上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44614647/

相关文章:

python - 从旧的 pandas df 创建新的 pandas df

python - return 和 yield 在同一个函数中

python - pip 没有安装我的数据文件。但是 easy_install 确实

python - PEG递归文法

python - 从其他数据帧顺序更新 pandas 列

python - 按升序排列 Django 查询集,但末尾为 0 值项

python - 使用 Python 中的 networkX 包绘制图形分区

python - 展开 Python 列表中的变量

python - 自适应支付支付 API 错误 580001

python - Python的pyautogui.PAUSE和time.sleep有什么区别?