You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

全局定义的selected_files仍报未定义错误,求Python脚本排查

问题排查:'selected_files' is not defined 错误

错误原因

你的代码里,生成VLC播放列表的那段代码写在脚本最外层,Python解释器运行时会从上到下执行:

  1. 先导入模块、定义函数
  2. 直接执行# create a VLC playlist in select folder下面的所有代码
  3. 最后才调用main()函数

也就是说,当执行到for file in selected_files:这行时,main()还没运行,selected_files这个变量完全没被定义,所以报错。

修正方案

把生成播放列表的代码全部移到main()函数内部,确保它在selected_files被创建之后再执行,既符合逻辑也能避免变量未定义问题。

修正后的完整代码

import os
import random
    
def find_files(folder, extensions):
    files = []
    for root, dirs, filenames in os.walk(folder):
        for filename in filenames:
            if any(filename.endswith(ext) for ext in extensions):
                files.append(os.path.join(root, filename))
    return files

def main():
    # 指定要搜索的文件夹和视频格式
    folders = [r"path\to\show1", r"path\to\show2", r"path\to\show3", r"path\to\show4"]
        
    extensions = (".mp4", ".avi", ".mkv")

    selected_files = []
    for folder in folders:
        files = find_files(folder, extensions)
        if files:
            selected_files.append(random.choice(files))
        else:
            print(f"No files found in {folder}.")
    if not selected_files:
        print("No files found.")
        return
    
    # 创建VLC播放列表(移到此处,确保selected_files已定义)
    playlist_folder = r"path\where\playlist\is\saved"
    if not os.path.exists(playlist_folder):
        os.makedirs(playlist_folder)
    playlist_file = os.path.join(playlist_folder, "PMTV.xspf")
    with open(playlist_file, "w", encoding='utf8') as f:
        f.write('<?xml version="1.0" encoding="UTF-8"?>\n')
        f.write('<playlist xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/" version="1">\n')
        f.write('\t<title></title>\n')
        f.write('\t<trackList>\n')
        for file in selected_files:
            f.write('\t\t<track>\n')
            f.write(f'\t\t\t<location>{file}</location>\n')
            f.write('\t\t\t<title></title>\n')
            f.write('\t\t\t<duration></duration>\n')
            f.write('\t\t\t<extension application="http://www.videolan.org/vlc/playlist/0">\n')
            f.write('\t\t\t\t<vlc:id></vlc:id>\n')
            f.write('\t\t\t</extension>\n')
            f.write('\t\t</track>\n')
        f.write('\t</trackList>\n')
        f.write('</playlist>\n')
    print(f"{len(selected_files)} files added to {playlist_file}")
    
if __name__ == "__main__":
    main()

额外优化说明

去掉了global selected_files声明,现在selected_files是main()函数的局部变量,不需要全局声明,代码更规范,也避免了全局变量带来的潜在问题。

内容的提问来源于stack exchange,提问作者rustyshackleford_V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:00:27