Как вызвать переменную из другого файла в python?

#python #selenium #automation

#python #selenium #автоматизация

Вопрос:

Я создал 2 файла. a.py имеет класс foo() и b.py имеет класс fun(). fun() является дочерним классом foo(). foo() имеет функцию, приведенную ниже:

 def get_random_password(self):
    " func to generate random password "
    try:
        password_characters = string.ascii_letters   string.digits   string.punctuation
        nw_password = ''.join(random.choice(password_characters) for i in range(30))
        return nw_password
 

теперь я хочу использовать эту переменную nw_password в какой-либо другой функции fun() (приведенная ниже функция используется для входа пользователя)

         username = self.driver.find_element_by_id("username")
        time.sleep(3)
        username.send_keys(self.vm_spec_dic['name'])
        time.sleep(5)
        password = self.driver.find_element_by_id("password")
        time.sleep(5)
        password.send_keys(nw_password)
        time.sleep(10)
        login = self.driver.find_element_by_id("loginBtn")
        login.click()
        
 

Я использую selenium для автоматизации. Я хочу вызвать переменную nw_password из a.py чтобы b.py . но получение ошибки? Я получаю ошибки, такие как модуль ‘lib.b’ не имеет атрибута ‘nw_password’????

 from a import nw_password
 

Импорт не работает

Комментарии:

1. переменные внутри оператора try заключены в свой собственный блок

2. Он говорит, что даже не может импортировать

3. Какова структура вашего проекта?

4. Также, как показано в приведенном ниже ответе, для этой строки password.send_keys(nw_password) вам нужно вызвать nw_password функцию: password.send_keys(nw_password())

5. Oishin, пожалуйста, обновите вопрос с ошибкой, с которой вы столкнулись при импорте. Возможно a , это имя чего-то в стандартной библиотеке python, возможно, вам придется переименовать файл

Ответ №1:

Область действия переменной находится только внутри определения функции, вероятно, вы могли бы использовать переменную и сохранить возврат метода get_random_password(self)

var = yourObjectFromfoo.get_random_password()

затем попробуйте импортировать эту переменную

Комментарии:

1. Кажется, он не может импортировать модуль в первую очередь

2. Это немного расплывчато, но он сказал (модуль ‘lib.b’ не имеет атрибута ‘nw_password’), поэтому я подумал, что у него проблема с переменной, а не с самим модулем, в любом случае он не может импортировать переменную таким образом, даже если модуль можно импортировать

3. @oshinaggrawal вы получаете сообщение об ошибке при импорте?

4. @RolvApneseth да .. там написано, что атрибута нет

5. @MohammedEzzat вызывает nw_password как глобальную переменную, которая невозможна для файлов????

Ответ №2:

Чтобы импортировать вашу функцию, попробуйте это:

 from a import get_random_password
 

Если вы хотите сохранить ее в переменной с именем nw_password , вы можете сделать это в своем основном файле:

 nw_password = get_random_password()
 

nw_password это просто имя вашего возвращаемого значения, которое вы нигде не сохраняете. Итак, чтобы получить случайный пароль, вам нужно фактически запустить созданную вами функцию. И, как говорили другие, переменная в любом случае будет находиться внутри области действия функции, поэтому вам придется сделать ее глобальной переменной (не рекомендуется).

Комментарии:

1. Чтобы вызвать только значение nw_password из файла, внутри a, вы должны были бы сказать, вне функции, напишите: nw_password = get_random_password() тогда внутри вашего основного файла вы теперь можете использовать from a import nw_password

2. ошибка при импорте nw_password ImportError: не удается импортировать имя ‘nw_password’, возникает ошибка

3. Просто выполните метод top, в котором в свой основной файл вы импортируете функцию, созданную в a