import org.springframework.web не может быть разрешен [дубликат]

Python: Mutable Default Argument

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

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

Они остаются мутированными, потому что каждый раз они являются одним и тем же объектом .

Эквивалентный код:

Поскольку список связан с функцией, когда объект функции компилируется и инстанцируется, это:

def foo(mutable_default_argument=[]): # make a list the default argument
    """function that uses a list"""

почти точно эквивалентно этому:

_a_list = [] # create a list in the globals

def foo(mutable_default_argument=_a_list): # make it the default argument
    """function that uses a list"""

del _a_list # remove globals name binding

Демонстрация

Вот демонстрация - вы можете проверить, что они являются одним и тем же объектом каждый раз, когда они ссылаются на

  • , увидев, что список создан до того, как функция завершила компиляцию объекту функции,
  • , заметив, что идентификатор один и тот же каждый раз, когда список ссылается,
  • , наблюдая, что список остается, когда функция, которая его использует, называется второй раз,
  • , наблюдая порядок, в котором вывод печатается из источника (который я удобно пронумеровал для вас):

example.py

print('1. Global scope being evaluated')

def create_list():
    '''noisily create a list for usage as a kwarg'''
    l = []
    print('3. list being created and returned, id: ' + str(id(l)))
    return l

print('2. example_function about to be compiled to an object')

def example_function(default_kwarg1=create_list()):
    print('appending "a" in default default_kwarg1')
    default_kwarg1.append("a")
    print('list with id: ' + str(id(default_kwarg1)) + 
          ' - is now: ' + repr(default_kwarg1))

print('4. example_function compiled: ' + repr(example_function))


if __name__ == '__main__':
    print('5. calling example_function twice!:')
    example_function()
    example_function()

и работает это с python example.py:

1. Global scope being evaluated
2. example_function about to be compiled to an object
3. list being created and returned, id: 140502758808032
4. example_function compiled: 
5. calling example_function twice!:
appending "a" in default default_kwarg1
list with id: 140502758808032 - is now: ['a']
appending "a" in default default_kwarg1
list with id: 140502758808032 - is now: ['a', 'a']

Означает ли это нарушение принципа «Наименьшее удивление»?

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

Обычная инструкция для новых пользователей Python:

Но поэтому обычная инструкция для новых пользователей заключается в том, чтобы вместо этого создать свои аргументы по умолчанию:

def example_function_2(default_kwarg=None):
    if default_kwarg is None:
        default_kwarg = []

Это использует None singleton как объект-дозор, чтобы сообщить функции, есть ли у нас аргумент, отличный от значения по умолчанию. Если мы не получаем никакого аргумента, то мы действительно хотим использовать новый пустой список [] в качестве значения по умолчанию.

Как говорится в разделе в разделе управления потоком :

Если вы не хотите, чтобы по умолчанию были разделены между последующими вызовами, вы можете написать такую ​​функцию, как это:

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L
blockquote>
17
задан Rolando 7 December 2011 в 23:20
поделиться

11 ответов

У меня была та же проблема. Проведя часы, я наткнулся на решение, что я уже добавил зависимость от «spring-webmvc», но пропустил «spring-web». Поэтому просто установите приведенную ниже зависимость для решения этой проблемы. Если у вас уже есть, просто обновите обе версии до последней версии. Это будет работать точно.

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.1.6.RELEASE</version>
</dependency>
20
ответ дан halfer 21 August 2018 в 12:50
поделиться
  • 1
    Спасибо, помощник, тоже работал на меня. Есть ли у вас идеи, что если мы не укажем версию, которая загружает весну? Не загружает ли она последнюю версию по умолчанию! – varunkr 20 June 2017 в 11:58
  • 2
    Он выдает ошибку (ошибки) / исключение (исключения), если мы не укажем «& lt; version & gt;» & quot; тег. Следовательно, тег "& lt; version & gt;" является обязательным. Во-вторых, если вы не укажете версию внутри этого тега, вам нужно будет указать маркеры версий «LATEST» / «RELEASE & quot; (Только когда вы работаете с Maven 2.x). Для Maven 3.x маркеры мета-версии больше не поддерживаются. Как всегда указывать на последнюю версию зависимостей, может возникнуть проблема при создании приложения. Поэтому настоятельно рекомендуется использовать конкретные значения версий. – MAC 21 June 2017 в 08:39
  • 3
    Для более подробной информации проверьте Stackoverflow и Apache Maven – MAC 21 June 2017 в 08:50
  • 4
    Работал для меня. Теперь import org.springframework.web.bind.annotation.RequestMapping; работает. Благодаря! – Sylhare 8 September 2017 в 02:35

Перейти к pom.xml

Добавить эту зависимость:

   <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>

с помощью командной строки, найдите свою папку: - mvn clean

0
ответ дан A3R 21 August 2018 в 12:50
поделиться

Я не думаю, что проблема связана с зависимостями. Я предполагаю, что вы получаете эту ошибку в своей среде IDE. Затем просто обновите его. Если это затмение, попробуйте запустить Maven-> Update Dependencies

5
ответ дан Alejandro Diaz 21 August 2018 в 12:50
поделиться

Я думаю, что вы используете Spring 3.0.5, и вам нужно использовать Spring 4.0. * Это решит вашу проблему. org.springframework.web.bind.annotation.RequestMapping недоступен в Spring-web ранее Spring-web 4.0. *

2
ответ дан Anuj Panwar 21 August 2018 в 12:50
поделиться

Чтобы решить, обновите Spring Frame Work до 3.2.0 или выше!

4
ответ дан AVA 21 August 2018 в 12:50
поделиться

У меня была та же проблема, но я решил по-другому (потому что при щелчке правой кнопкой мыши по папке проекта нет вкладки Maven, только если я это сделаю на pom.xml, я могу увидеть вкладку Maven):

Поэтому я понимаю, что вы получили эту ошибку, потому что среда IDE (Eclipse) не импортировала зависимости от Maven. Поскольку вы используете Spring framework и, вероятно, у вас есть STS allready, щелкните правой кнопкой мыши папку проекта Spring Tools -> Update Maven Dependecies.

Я использую Eclipse JUNO m2eclipse 1.3.0 Spring IDEE 3.1

0
ответ дан Cassian 21 August 2018 в 12:50
поделиться

Это решение WORKS, у меня была такая же проблема, и после нескольких часов я подошел к этому:

(1) Перейдите к вашему pom.xml (2) Добавьте эту зависимость:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>

(3) Запустите проект

20
ответ дан Danish Sofwan 21 August 2018 в 12:50
поделиться
  • 1
    спасибо, я только что обновил версию, потому что spring-webmvc уже был в моем пом – eeadev 11 November 2015 в 10:15

Я использовал версию весеннего веб-сайта 4.3.7

Сменив его на рабочий 4.1.7, он сразу же решил его.

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>
1
ответ дан Linus Gwabha 21 August 2018 в 12:50
поделиться

У меня была почти такая же проблема, но это было просто потому, что некоторая библиотека .jar не обновлялась.

Я не мог использовать @RequestMapping, потому что просто «мыши над @RequestMapping» и нажмите «Fix ...», а библиотека .jar будет загружаться и устанавливаться.

0
ответ дан Ruben Es 21 August 2018 в 12:50
поделиться

Иногда в локальном репозитории Maven возникает некоторая ошибка. Поэтому, пожалуйста, закройте свое затмение и удалите jar spring-webmvc из вашего локального .m2, затем откройте Eclipse и в проекте нажмите Update Maven Dependencies.

Затем Eclipse снова загрузит вашу зависимость. Вот как я исправил ту же проблему.

2
ответ дан Xelian 21 August 2018 в 12:50
поделиться
0
ответ дан Manas Ranjan Mahapatra 1 November 2018 в 06:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: