функция Python определена, но вызывает NameError - PullRequest
0 голосов
/ 25 мая 2018

Среда: Opensuse Linux 42.3, python 3.4.6, работающий в eclipse

Для автоматизированной тестовой системы я генерирую скрипты python из тестовых случаев.При выполнении сценариев возникает ошибка

NameError: name 'setVariable' is not defined

Сгенерированные сценарии импортируют модуль с именем testfunc, который определяет функции:

testfunc.py:

import sys

print("defining 'saveDeviceStatus'")
def saveDeviceStatus(devicePath,fq_fileName):
    print("ssaveDeviceStatus:")
    print("device '%s'" % devicePath)
    print("filePath '%s'" % fq_fileName)

print("defining 'setVariable'")
def setVariable(path,value):
    print("setVariable:")
    print("path '%s'" % path)
    print("value '%s'" % value)

print("defining 'compareDeviceStatus'")
def compareDeviceStatus(device,filename,options):
    print("compareDeviceStatus:")
    print("device '%s'" % device)
    print("filename '%s'" % filename)
    print(options)

print("defining 'checkResults'")
def checkResults(checkList):
    print("checkResults:")
    print(checkList)

A сгенерированоСценарий выглядит следующим образом:

t_0030_1206_001.py:

#!/usr/bin/python3
#
import time
import os,sys
import importlib.util
spec = importlib.util.spec_from_file_location("testFunctions", "../")
sys.path.append("/home/heinrich/git/swisbox/swibTestPy/pyLib/")
import testfunc

os.chdir('/home/heinrich/git/swisbox/swib61850/test/tryAutomation/nanopi/pilot_dal-static-lib/180525T093506/')
sys.path.append('/home/heinrich/git/swisbox/swibTestPy/src/testlinkFiles/')


# draw actual status
saveDeviceStatus("SWIBCLS1","beforeSwitch_to_1")

checkResults([
    compareDeviceStatus("SWIBCLS1","beforeSwitch_to_1",["nodate"])
    ])

При выполнении сценария выводится

$ ./t_0030_1206_001.py 
defining 'saveDeviceStatus'
defining 'setVariable'
defining 'compareDeviceStatus'
defining 'checkResults'
Traceback (most recent call last):
  File "./t_0030_1206_001.py", line 17, in <module>
    saveDeviceStatus("SWIBCLS1","beforeSwitch_to_1")
NameError: name 'saveDeviceStatus' is not defined
$

Хотя операторы печати выполняются, (для меня), указывая нафункции были определены, вызов их приводит к ошибке.Что мне здесь не хватает?Какую дополнительную диагностику я могу запустить?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Для начала, эта ошибка жалуется на saveDeviceStatus, а не setVariable.

Это не должно вас удивлять;saveDeviceStatus вы никуда не импортируете.Вы делаете импорт testfunc;поэтому вы должны ссылаться на функции через это имя.Вы должны использовать lower_case_with_underscores для имен функций, а не camelCase.

0 голосов
/ 25 мая 2018

Это может помочь:

mod.py:

def my_fun():
    print ("Hello, world")

main.py:

import mod
my_func()

выполнение:

python3 main.py 
Traceback (most recent call last):
  File "main.py", line 3, in <module>
    my_func()
NameError: name 'my_func' is not defined

Вы можете исправить это, импортировав функцию

from mod import my_fun

или используя:

mod.my_fun()

Так что, в вашем случае, используйте: testfunc.saveDeviceStatus(..) или используйте from testfunc import saveDeviceStatus

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...