0

Я занимаюсь курсами нуклеанов. Упражнения основаны на сценариях python, и я использую Visual Studio 2015. В какой-то момент мы должны использовать библиотеку nltk. Я пытался отлаживать некоторый код, который я вызываю (у меня есть источник), и что-то действительно странное случается: работают точки останова, но я не могу использовать F10 для перехода строки в линию. Он просто пропускает весь скрипт. Я могу отлаживать без каких-либо проблем какие-либо мои скрипты, но не те, что находятся в библиотеке. Итак, мой вопрос: есть ли опция «разблокировать» сценарий, чтобы я мог отлаживать строки за строкой? Я новичок в python, и я не могу найти ничего подобного в google. Я отправляю код в случае, если что-то имеет значение. Функция я хочу отладить это «Ответить»Python Script заблокирован для отладки в VS 2015

from __future__ import print_function 

import re 
import random 
from nltk import compat 

reflections = { 
"i am"  : "you are", 
"i was"  : "you were", 
"i"   : "you", 
"i'm"  : "you are", 
"i'd"  : "you would", 
"i've"  : "you have", 
"i'll"  : "you will", 
"my"   : "your", 
"you are" : "I am", 
"you were" : "I was", 
"you've"  : "I have", 
"you'll"  : "I will", 
"your"  : "my", 
"yours"  : "mine", 
"you"  : "me", 
"me"   : "you" 
} 

class Chat(object): 
def __init__(self, pairs, reflections={}): 
    self._pairs = [(re.compile(x, re.IGNORECASE),y) for (x,y) in pairs] 
    self._reflections = reflections 
    self._regex = self._compile_reflections() 


def _compile_reflections(self): 
    sorted_refl = sorted(self._reflections.keys(), key=len, 
      reverse=True) 
    return re.compile(r"\b({0})\b".format("|".join(map(re.escape, 
     sorted_refl))), re.IGNORECASE) 

def _substitute(self, str): 
    return self._regex.sub(lambda mo: 
      self._reflections[mo.string[mo.start():mo.end()]], 
       str.lower()) 

def _wildcards(self, response, match): 
    pos = response.find('%') 
    while pos >= 0: 
     num = int(response[pos+1:pos+2]) 
     response = response[:pos] + \ 
      self._substitute(match.group(num)) + \ 
      response[pos+2:] 
     pos = response.find('%') 
    return response 

def respond(self, str): 
    # check each pattern 
    for (pattern, response) in self._pairs: 
     match = pattern.match(str) 

     # did the pattern match? 
     if match: 
      resp = random.choice(response) # pick a random response 
      resp = self._wildcards(resp, match) # process wildcards 

      # fix munged punctuation at the end 
      if resp[-2:] == '?.': resp = resp[:-2] + '.' 
      if resp[-2:] == '??': resp = resp[:-2] + '?' 
      return resp 

# Hold a conversation with a chatbot 
def converse(self, quit="quit"): 
    input = "" 
    while input != quit: 
     input = quit 
     try: input = compat.raw_input(">") 
     except EOFError: 
      print(input) 
     if input: 
      while input[-1] in "!.": input = input[:-1] 
      print(self.respond(input)) 

Любая помощь будет очень высоко ценится. Спасибо.

EDIT: Я решил свою проблему, но я не нашел решение проблемы. Я использую PyCharm (как было предложено в первом комментарии), и это работает как шарм. Теперь я могу отлаживать все без проблем. Никакой модификации файла вообще. Я склонен думать, что это ошибка в инструментах Python для Visual Studio.

+1

ли вам пользовательские сочетания клавиш? Похоже, что F10 - «шаг за шагом», вы имеете в виду, что вы хотите использовать «Step Into (F11)» в меню Debug? Если вы добавите точку останова, как насчет результата, если вы его отлаживаете? Другие члены используют PyCharm вместо PTVS в качестве обходного пути: http://stackoverflow.com/questions/37240431/python-tools-visual-studio-step-into-not-working –

+0

Привет, Джек. Я не настраивал свою клавиатуру, я сохраняю все настройки по умолчанию. Я не могу ни перешагнуть, ни вмешаться в этот скрипт, но я могу это сделать в любом из сценариев, которые я пишу. Если я добавлю точку останова, она остановится, и я увижу значения переменных и т. Д., Но, если я нажму F10, чтобы перейти к следующей строке, он просто перескакивает в этой функции. Единственное, что сработало, - это установить точку останова в каждой строке внутри функции, и я нажимаю F5, чтобы прыгать один за другим. Это просто не имеет никакого смысла. Я попробую PyCharm и опубликую результаты. Спасибо – MBRebaque

+0

, пожалуйста. Вы можете поделиться мне простым образцом, я отлажу его с помощью той же VS-среды VS, чтобы мы могли знать, связано ли это с инструментом отладчика VS или конкретным типом проекта. Другое предложение, как и мой предыдущий комментарий, использует другой способ, как PyCharm, а не как обходной путь. Если у вас есть какая-либо информация, не стесняйтесь, дайте мне знать :) –

ответ

1

Другие члены также получили аналогичную проблему, мое предложение состоит в том, что вы можете использовать PyCharm вместо PTVS в качестве обходного пути. Конечно, вы могли бы также начать обсуждение (ВиО) с этого сайта PTVS инструмента:

https://visualstudiogallery.msdn.microsoft.com/9ea113de-a009-46cd-99f5-65ef0595f937