Python: NameError: имя «первое» не определено, когда я импортирую весь пакет

Когда я импортирую весь пакет, он дает мне NameError. Но когда я импортирую отдельные модули и запускаю тот же код, он работает правильно.

Моя структура:

  • мой_пакет/каталог
    • __init__.py
    • first.py
    • второй.py
    • main.py

Когда я запускаю main.py, как показано ниже, я получаю NameError:

import my_package
first.say_1st()
second.say_2nd()
"C:\\Program Files\\Python312\\python.exe" "D:\\E Drive\\Training\\pythonProject1\\Sample scripts\\Package example\\main.py"
Traceback (most recent call last):
File "D:\\E Drive\\Training\\pythonProject1\\Sample scripts\\Package example\\main.py", line 4, in \<module\>
first.say_1st()
^^^^^
NameError: name 'first' is not defined. Did you mean: 'list'?

Process finished with exit code 1

Но когда я запускаю main.py, как показано ниже, это дает ожидаемый результат.

from my_package import first
first.say_1st()

from my_package import second
second.say_2nd()

Я делаю что-то не так?

Вы делаете это прямо во втором фрагменте кода.

quamrana 01.09.2024 07:24

Спасибо Quamrana за ответ. Но разве это не сработает и для первого фрагмента? Я просто пытаюсь понять. Простите мое невежество

NBS 01.09.2024 07:43

Я попробовал это: - import my_package #from my_package import * #from my_package import first my_package.first.say_1st() #from my_package import Second my_package. Second.say_2nd() Это дает мне эту ошибку. Traceback (последний последний вызов): Файл "D:\E Drive\Training\pythonProject1\Sample scripts\Package example\main.py", строка 5, в <module> my_package.first.say_1st() ^^^^^^^^^^^^^^ ^^ AttributeError: у модуля «my_package» нет атрибута «first».

NBS 01.09.2024 10:28
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы установить все пакеты, используйте from my_package import * вместо import my_package. Я уже видел эту проблему раньше и могу сказать только одно: Python немного странный.

Надеюсь, это решит вашу проблему.

Хотя это работает, это не рекомендуется, поскольку вы больше не сможете отследить, откуда поступает импорт.

Klaus D. 01.09.2024 10:59

Другие вопросы по теме