Python, 使用来自其他.py文件中函数的全局变量 / 名称错误

get_asset_type_v001.py


import re


def get_asset_type(filename):

    """Check filename for asset type"""

    global is_vfx_file, is_edit_file, proj_yy, client, show, edit_version, edit_stage, tv, pv, date, seq_nr, seq_name, shot_nr, shot_name

    is_vfx_file = False

    is_edit_file = False

    if re.match(edit_pattern, filename):  # Check if file is a edit prev

        print("\nFile is an Edit prev. Filename: {}".format(filename))

        proj_yy, client, show, edit_version, edit_stage, tv, pv, date, *_ = filename.split("_")

        is_edit_file = True

    if re.match(vfx_pattern, filename):  # Check if file is a VFX prev

        print("\nFile is a VFX prev. Filename: {}".format(filename))

        seq_nr, seq_name, shot_nr, shot_name, *_ = filename.split("_")

        is_vfx_file = True


# get_asset_type(sample_vfx_filename) # Call function to return is vfx file and print result

# print(is_vfx_file)  # Check if it's a vfx file

在同一文件中打印函数的工作方式类似于魅力。


print('_'.join(list((seq_nr, seq_name, shot_nr, shot_name))))

main_programm_file_v001.py


from get_asset_type_v001 import *  # Import function ti check what asset type it is



filename = sample_vfx_filename


get_asset_type(filename)  # Code workes fine till this line

print('_'.join(list((seq_nr, seq_name, shot_nr, shot_name))))  # The variables in this line "seq_nr..." are making the problem

但是,尝试在另一个文件中使用导入函数中的代码会引发以下错误。似乎我无法访问全局变量。


名称错误:未定义名称“seq_nr”


慕尼黑5688855
浏览 157回答 2
2回答

MMTTMM

我将重新定义该函数以返回一个值,其中包含有关传递的文件名类型的元数据。举个例子:import redef get_asset_type(filename):    """Check filename for asset type"""    if re.match(edit_pattern, filename):        print("\nFile is an Edit prev. Filename: {}".format(filename))        fields = filename.split("_")        return {'type': 'edit',                'proj_yy': fields[0],                'client': fields[1],                ...}    if re.match(vfx_pattern, filename):  # Check if file is a VFX prev        print("\nFile is a VFX prev. Filename: {}".format(filename))        fields = filename.split("_")        return {'type': 'vfx',                'seq_nr': fields[0],                'seq_name': fields[1],                ...}您的正则表达式很可能可以使用捕获组来定义,以避免随后拆分文件名的需要;如果模式匹配,则返回值将已包含相关组件。然后在您的主程序中:import get_asset_type_v001filename = sample_vfx_filenameresult = get_asset_type_v001.get_asset_type(filename)if result['type'] == 'vfx':    print('_'.join([result['seq_nr'], result['seq_name'], ...]))

眼眸繁星

具有捕获组的选项:def get_asset_type(filename): # V003    """Check filename for asset type"""    n = re.match(edit_pattern, filename)    if n:  # Check if file is a edit prev        print("\nFile is an Edit prev. Filename: {}".format(filename))        fields = filename.split("_")        return {'type': 'edit',                'proj_yy': n.group('proj_yy'),                'client': n.group('client'),                'show': n.group('show'),                'edit_version': n.group('edit_version'),                'edit_stage': n.group('edit_stage'),                'tv': n.group('tv'),                'pv': n.group('pv'),                'date': n.group('date'),                }    m = re.match(vfx_pattern, filename)    if m:  # Check if file is a VFX prev        print("\nFile is a VFX prev. Filename: {}".format(filename))        print(m.group('seq_name'))        return {'type': 'vfx',                'seq_nr': m.group('seq_nr'),                'seq_name': m.group('seq_name'),                'shot_nr': m.group('shot_nr'),                'shot_name': m.group('shot_name')                }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python