Функция из другого вспомогательного файла, возвращающая None вместо True. Но та же функция возвращает True, если помещена в тот же файл, откуда я ее вызываю - PullRequest
0 голосов
/ 24 февраля 2020

Я не могу понять, что отличается, когда я помещаю указанную ниже функцию в другой файл, скажем - abc.xyz.setup.setup_profiles

def create_profile(profile_name, profile_value, matches):
rc_file_data = '''
           {some data here

       }
   '''
json_data = json.loads(rc_file_data)
'''
do something with jason data
'''
rc_file_path = "some-path"

with open(rc_file_path, 'w') as rcfile:
    json.dump(json_data, rcfile, indent=2)
    return True
return False

и вызываю его, как показано ниже -

from abc.xyz.setup.setup_profiles import create_profile

def anyfunc():
    print create_profile("something", "somevalue", "somevalue2")

anyfunc()

он возвращает None.

Но если я поместил ту же функцию create_profile над функцией - anyfun c () в том же файле, он вернет True.

Расположение файла, содержащего функцию - anyfun c (): abc.xyz.template.T111.

Мне нужно поместить эти функции в два разных файла. Помогите мне понять, что здесь не так.

1 Ответ

0 голосов
/ 24 февраля 2020

Проблема заключается в том, что при непосредственном запуске setup_profiles он мог прочитать rc_file_path = "some-path", то есть "some-path" находился в области действия текущей рабочей среды для python.

Но при запуске из другого файла «some-path», то есть rc_file_path, не попал в область действия среды python, поэтому он не смог прочитать файл и вернул None.

Чтобы быстро исправить, вы можете указать полный путь

, т.е.

rc_file_path = C:/...../somepath.txt

в windows.

или

rc_file_path = /home/username/..../somepath.txt 

in linux

Или, если вы хотите просто передать имя файла, в текущей рабочей среде добавьте путь / папку файлов в вашу среду, используя следующий код.

import sys
sys.path.insert(0,"path to the directory of file/dependencies/config files which has to included") 
...