невозможно импортировать класс, даже если его находит quick fix

#python #visual-studio-code

#python #visual-studio-code

Вопрос:

В своем коде я использую еще не импортированный класс NoSuchElementException . Если я выберу класс и сделаю «импортировать класс» или «развернуть класс», я получу «Класс не найден»..

Но VS code предлагает исправление (желтая лампочка), и если я нажму на него, он импортирует класс вверху :

from selenium.common.exceptions import NoSuchElementException

Если VS code может найти класс, почему «импортный класс» его не находит?

Даже с простым именем класса, таким как «By», vscode быстро находит возможные классы, и я делаю «quick fix» :

быстрое исправление vscode

Но я бы хотел сделать что-то вроде «import class» или «expand class» самостоятельно, вместо того, чтобы использовать «quick fix».

Ответ №1:

VS Code отсканировал все модули, которые он может найти, и создал базу данных возможных решений. Он угадывает, что вам может понадобиться, и показывает это вам. Это довольно трудоемкий процесс, что хорошо, когда вы редактируете в IDE, но обременительно для каждой загрузки программы на python. И предположение — это просто предположение. Вы не можете полностью автоматизировать то, что так подвержено ошибкам. Разумно думать, что несколько пакетов будут реализовывать нечто, называемое «NoSuchElementException». Как насчет чего-то действительно общего, такого как «Путь» или «Приложение»?

В Python есть набор правил о пространствах имен и о том, где модули хранятся на диске, чтобы избежать двусмысленностей во время выполнения.

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

1. IDE стали настолько «полезными», что я избегаю их, когда это возможно.

2. Но даже с таким простым классом, как «By», vscode находит возможные классы, и я делаю «quick fix». Но я бы хотел сделать что-то вроде «импортировать класс» или «развернуть класс» самостоятельно, вместо того, чтобы использовать «quick fix». Я обновил свой пост скриншотом.

3. @trogne — Но, в конце концов, это всего лишь предположение. Предположим, что вы устанавливаете эту программу на другой компьютер, на котором есть другой пакет с «By» — вы зависаете без видимой причины. VSCode достаточно просто пометить «By» как undefined — вы должны знать, из какого пакета он был, когда вы решили его использовать — дополнительное предложение немного полезно. Но предположение может быть неверным, и вам все равно нужно знать, каким оно должно быть. Но как насчет того, когда кто-то другой посмотрит на ваш код или в следующем году, когда вы забудете, что вы сделали. «By» без импорта, чтобы сообщить вам, какой пакет вы использовали, бесполезен.

4. ОК. Я буду придерживаться использования «quick fix» (ctrl .). VSCode очень хорош в этом. Я бы подумал, что то, что делает VSCode при использовании «quick fix», — это что-то другое, имеющее свою собственную команду (например, «import class» или что-то еще).

5. Может быть модуль, который делает это, или вы можете написать свой собственный, опубликовать его на pypi.python.org и посмотрим, наберет ли он обороты. Вы не хотите фактически загружать все модули в систему, но какое-то лексическое сканирование даст вам информацию. Я думаю, что это ужасная идея, но это только одно мнение. Вы можете позволить рынку решать.

Ответ №2:

Я думаю, что это как-то связано с несколькими папками в каталоге python, установленном на вашем компьютере. Папка, которую вы пытаетесь импортировать, находится глубоко в каталоге python. Если вы используете Import NoSuchElementException программу, не можете ее найти, потому что она не проникает так глубоко, как нужно, чтобы найти папку.

Вот почему вам нужно указать selenium.common.exceptions . Таким образом, программа знает, в каких папках искать NoSuchElementException

Я надеюсь, что этот ответ поможет вам.