【问题标题】:Python help: Globally defined item keeps yielding not defined errorPython帮助:全局定义的项目不断产生未定义的错误
【发布时间】:2023-02-08 04:01:15
【问题描述】:

PSA:Python 学习者(30 天,还在增加)。 我正在尝试创建一个 python 脚本,它创建一个视频播放列表,这些视频是从给定文件夹/子文件夹中随机选择的。当我运行它时,我在脚本的第 40 行(在“#create a VLC playlist in select folder”部分)出现“'selected_files' is not defined”错误,当我在全局范围内明确定义它时......我思考。欢迎协助。

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():
    global selected_files
    # specify the folders to search and the file extensions to search for
    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
    
# create a VLC playlist in select folder
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()

【问题讨论】:

  • 你的意思是 block 1 sub def 3 where selected _files is defined?我希望这里的 selected_files 指的是我放在 def main () folders=["blah1....blah2....blah3...etc] 中的所有内容。

标签: python


【解决方案1】:

加载脚本时,代码位于

# create a VLC playlist in select folder

...在到达 main 之前被执行

它向你吐槽,因为 selected_files 尚未定义。 ...所以通过插入

selected_files=[]

你定义它,然后停止呕吐。

现在,除此之外,您在这方面可能存在逻辑错误,因为当您在 for file in selected_files: 进入循环时,selected_files 不包含任何内容 - 在第 40 行 - 因为它尚未填充项目。

【讨论】:

  • 将它放在全局声明 (global selected_files) 之前并不能解决问题。我试图将 select_file 设为本地(即 def main(): selected_files = []),但它不起作用。
  • 答案已更新。
猜你喜欢
  • 2018-11-25
  • 2018-05-22
  • 2013-07-03
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 2012-08-24
相关资源
最近更新 更多