Сервер разработки Visual Studio с помощью неправильного порта

Проблема определения объема: когда срабатывает lambda, он проверяет область действия для переменной cmd. Во время каждой итерации for cmd in commands: переменная cmd устанавливается в новое значение. В конце итерации переменная cmd в кадре равна окончательной итерации for cmd in commands: (т. Е. - {'label': 'retrieve', 'reqId': 2}).

Решение состоит в том, чтобы указать «новую» переменную в сигнатуре lambda, которую он затем будет использовать из-за того, как работает область видимости в python (цитирует «new», потому что это может быть переменная с тем же именем ). В частности, вы можете изменить свой код на что-то вроде:

for cmd in commands:
    self.rightMouse[treeName].add_command(label= cmd['label'],
                                          command= lambda reqid = cmd['reqId']: self.execCommand(reqid))

Ниже приведен скрипт, демонстрирующий то, о чем я говорю, на примере:

lambdas = []
words = ["Hello","World"]
print("Creating Lambds")
for word in words:
    my_lambda = lambda: word
    print('>>> Result for "{}" lambda: "{}"'.format(word,my_lambda()))
    lambdas.append(my_lambda)

print("Post Loop Lambda Results")
for w,_lambda in zip(words,lambdas):
    print('>>> Result for "{}" lambda: "{}"'.format(w,_lambda()))

word = "Foobar"
print('Setting word variable to "{}"'.format(word))
print("New Results for lambdas:")
for w,_lambda in zip(words,lambdas):
    print('>>> Result for "{}" lambda: "{}"'.format(w,_lambda()))

print("----------------\nSolution:\n")
lambdas = []
words = ["Hello","World"]
print("Creating Lambds")
for word in words:
    my_lambda = lambda myword = word: myword
    print('>>> Result for "{}" lambda: "{}"'.format(word,my_lambda()))
    lambdas.append(my_lambda)

print("Post Loop Lambda Results")
for w,_lambda in zip(words,lambdas):
    print('>>> Result for "{}" lambda: "{}"'.format(w,_lambda()))

word = "Foobar"
print('Setting word variable to "{}"'.format(word))
print("New Results for lambdas:")
for w,_lambda in zip(words,lambdas):
    print('>>> Result for "{}" lambda: "{}"'.format(w,_lambda()))

Вот несколько ссылок: [ 1119]

26
задан Community 23 May 2017 в 11:45
поделиться

3 ответа

У меня была подобная проблема, которые поражают мои 2 основных машины одновременно. При исследовании я нашел, что это было связано с Eset персональная безопасность (предполагающий, что недавнее обновление испортило что-то). Для решения его, я исключил VS2008 из активной фильтрации браузера - это находится в: установка-> усовершенствованная установка брандмауэра-> антивирус & антишпион-> защита веб-доступа-> HTTP-> webbrowsers

, Отменяющий выбор vsdev в здесь решенном проблема - интересно достаточно отключения брандмауэра и антивируса/, антишпион не решил проблему, таким образом, стоит искать подобную установку при выполнении другого защитного программного обеспечения

61
ответ дан Macros 28 November 2019 в 06:12
поделиться

Сначала попытайтесь уничтожить весь "WebDev.WebServer.exe" процессы.

  • В Проводнике Решения, нажмите название приложения.
  • В области Properties, нажмите стрелку вниз около динамических портов Использования и выберите Ложь из выпадающего списка. Это позволит редактировать свойства Номера порта.
  • В области Properties, нажмите текстовое поле около Номера порта и типа в номере порта.
  • Щелчок за пределами области Properties. Это сохраняет настройки свойства.

Hope это помогает

17
ответ дан alexl 28 November 2019 в 06:12
поделиться

Странный!

номер порта хранится в .sln файле. Так, я унес бы это далеко файл решения сначала, воссоздал бы его и видел бы то, что происходит. Если бы это не помогает, я тогда перешел бы на web.config файл и сдул бы это и запустился бы снова также.

2
ответ дан BenB 28 November 2019 в 06:12
поделиться
Другие вопросы по тегам:

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