NameError: имя 'air' не определено - PullRequest
0 голосов
/ 03 ноября 2018

Я начинающий питон, ситуация такова:

In test.py :

import numpy as np
import pandas as pd
from numpy import * 

def model(file):
    import numpy as np
    import pandas as pd

    data0 = pd.ExcelFile(file)
    data = data0.parse('For Stata')
    data1 = data.values
    varnames = list(data)

    for i in range(np.shape(data)[1]):
        var = varnames[i]
        exec(var+'=np.reshape(data1[:,i],(2217,1))')

    return air

воздух - это одно из «имен»


Теперь я запускаю следующее в блокноте jupyter :

file0 = 'BLPreadydata.xlsx'
from test import model
model(file0)

ошибка, которую я получаю: NameError: имя 'air' не определено

РЕДАКТИРОВАТЬ: я пытался зафиксировать ошибку, на самом деле она пришла с

exec(var+'=np.reshape(data1[:,i],(2217,1))')

почему-то это не работает, когда я вызываю функцию, но работает, когда я запускаю ее вне функции.

Примечание: Кто-то сделал это в MATLAB:

vals = [1 2 3 4]
vars = {'a', 'b', 'c', 'd'}
for i = vals
    eval([vars{i} '=  vals(i)'])
end  

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Я нашел ответ после прочтения документа exec (.) И угадывания ...

воздух фактически сохраняется как локальная переменная после exec (.) ...

следовательно, вместо

return air

положить

return locals()['air']

Спасибо за помощь.

0 голосов
/ 03 ноября 2018

Вы должны использовать еще один цикл for в функции, чтобы перебрать имена переменных и найти 'air, если найден, сохранить другую переменную и вернуть эту переменную.
Попробуй это.

for j in varnames:
    if j=='air':
       c=j

Затем верните c.

return c
...