Python вызывает исключение внутри оператора if - PullRequest
0 голосов
/ 24 апреля 2019

Я хочу проверить, есть ли определенная строка внутри имени объекта и вернуть путь к нему в соответствии с ним.Если ничего не найдено, я хочу выдать ошибку.Вот мой код:

def object_path(object_name):
    try:
        if object_type(object_name) in ['JX', 'JW', 'MT', 'WF']:
            obj_path = 'task'
        elif object_type(object_name) in ['TT', 'MT', 'FT']:
            obj_path = 'trigger'
        elif object_type(object_name) == 'VR':
            obj_path = 'virtual'
        else:
            raise ValueError()
    except ValueError as err:
        print('The name of  object {} is 
           incorrect'.format(object_name))
    return obj_path

if __name__ == "__main__":

    x = object_path('L8H_gh_hgkjjkh')
    print (x)

Это не кажется правильным, это то, что отбрасывает меня назад:

The name of UAC object L8H_gh_hgkjjkh is incorrect
Traceback (most recent call last):
  File "uac_api_lib.py", line 29, in <module>
    x = object_path('L8H_gh_hgkjjkh')
  File "uac_api_lib.py", line 24, in object_path
    return obj_path
UnboundLocalError: local variable 'obj_path' referenced before assignment

Не могли бы вы помочь мне это исправить?

Ответы [ 2 ]

3 голосов
/ 24 апреля 2019

Если вы хотите, чтобы ваша функция выдавала ValueError, то не поймайте ее в функции.

def object_path(object_name):
    if object_type(object_name) in ['JX', 'JW', 'MT', 'WF']:
        obj_path = 'task'
    elif object_type(object_name) in ['TT', 'MT', 'FT']:
        obj_path = 'trigger'
    elif object_type(object_name) == 'VR':
        obj_path = 'virtual'
    else:
        raise ValueError('The name of object {} is incorrect'.format(object_name))
    return obj_path

Кроме того, вы можете упростить это так:

def object_path(object_name):
    otype = object_type(object_name)
    if otype in {'JX', 'JW', 'MT', 'WF'}:
        return 'task'
    if otype in {'TT', 'MT', 'FT'}:
        return 'trigger'
    if otype == 'VR':
        return 'virtual'
    raise ValueError('The name of object {} is incorrect'.format(object_name))

но это зависит от вас.

0 голосов
/ 24 апреля 2019

Ошибка «ссылка перед присваиванием» существует потому, что obj_path существует только внутри вашего блока try / кроме. Просто определите это до этого.

def object_path(object_name):
    obj_path = ""
    try:
        if object_type(object_name) in ['JX', 'JW', 'MT', 'WF']:
            obj_path = 'task'
        elif object_type(object_name) in ['TT', 'MT', 'FT']:
            obj_path = 'trigger'
        elif object_type(object_name) == 'VR':
            obj_path = 'virtual'
        else:
            raise ValueError()
    except ValueError as err:
        print('The name of  object {} is 
           incorrect'.format(object_name))
    return obj_path
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...