2016-12-12 6 views
0

Я пытаюсь запустить этот код, но он, кажется, что exec() не выполняет строку внутри функции:Exec() не работает в функции python3.x

def abc(xyz): 
    for i in fn_lst: 
     s = 'temp=' + i + '(xyz)' 
     exec(s) 
     print (temp) 

abc('avdfbafadnf') 

Ошибки я получаю:

NameError         Traceback (most recent call last) 
<ipython-input-23-099995c31c78> in <module>() 
----> 1 abc('avdfbafadnf') 

<ipython-input-21-80dc547cb34f> in abc(xyz) 
     4   s = 'temp=' + i + '(word)' 
     5   exec(s) 
----> 6   print (temp) 

NameError: name 'temp' is not defined 

fn_lst список имен функций, то есть: ['has_at', 'has_num' ...]

Пожалуйста, дайте мне знать альтернативу exec() если возможно в таком сценарии.

ответ

0

Вместо использования exec с именами функций, просто держать функциональные объекты в списке:

fn_lst = [has_at, has_num, ...] 

и выполнить вызов непосредственно:

def abc(xyz): 
    for i in fn_lst: 
     temp= i(xyz) 
     print(temp)