为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑5688855 2022-09-13 17:49:23
get_asset_type_v001.pyimport redef 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.pyfrom get_asset_type_v001 import *  # Import function ti check what asset type it isfilename = sample_vfx_filenameget_asset_type(filename)  # Code workes fine till this lineprint('_'.join(list((seq_nr, seq_name, shot_nr, shot_name))))  # The variables in this line "seq_nr..." are making the problem但是,尝试在另一个文件中使用导入函数中的代码会引发以下错误。似乎我无法访问全局变量。名称错误:未定义名称“seq_nr”
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

我将重新定义该函数以返回一个值,其中包含有关传递的文件名类型的元数据。举个例子:


import re


def 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_v001


filename = sample_vfx_filename


result = get_asset_type_v001.get_asset_type(filename)

if result['type'] == 'vfx':

    print('_'.join([result['seq_nr'], result['seq_name'], ...]))


查看完整回答
反对 回复 2022-09-13
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

具有捕获组的选项:


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')

                }


查看完整回答
反对 回复 2022-09-13
  • 2 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号