0

我在做核心課程。練習基於python腳本,我使用的是Visual Studio 2015.在某些時候,我們必須使用庫nltk。我正在嘗試調試一些我正在調用的代碼(我有源代碼),並且發生了一些非常奇怪的事情:斷點工作,但是我不能使用F10來跳線。它只是跳過所有的腳本。我可以在沒有任何問題的情況下調試我的任何腳本,但不能調用庫中的腳本。 所以我的問題是:是否有任何選項來「解鎖」腳本,以便我可以逐行調試? 我是新來的蟒蛇,我無法找到任何類似的谷歌。我發佈代碼以防萬一有關。 我要調試的功能是「迴應」Python腳本鎖定在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)) 

任何幫助將是非常讚賞。 謝謝。

編輯: 我解決了我的問題,但我還沒有找到問題的解決方案。我使用PyCharm(如第一條評論中所建議的),它的功能就像一個魅力。我現在可以調試一切,沒有任何問題。根本沒有文件修改。我傾向於認爲這是Visual Studio Python工具中的一個錯誤。

+1

你自定義的快捷鍵?看來F10是「跳過」,你的意思是你想在Debug菜單下使用「Step Into(F11)」?如果添加一個斷點,如果調試它,結果如何?其他成員使用PyCharm而不是PTVS作爲解決方法:http://stackoverflow.com/questions/37240431/python-tools-visual-studio-step-into-not-working –

+0

嗨,傑克。我沒有自定義我的鍵盤,我保留了所有的默認設置。我不能在該腳本中跳過或跳入,但是我可以在我編寫的任何腳本中執行此操作。如果我添加一個斷點,它會停止,我可以看到變量的值等,但是如果我按下F10跳到下一行,它只會跳轉到該函數中。唯一有效的是,如果我在函數內的每一行中設置一個斷點,並且我按F5逐一跳轉。它只是沒有任何意義。我會嘗試PyCharm併發布結果。謝謝 – MBRebaque

+0

不客氣。您可以與我分享一個簡單的示例,我將使用相同的VS Environment進行調試,因此我們可以知道它是否與VS調試器工具或特定項目類型相關。另一個建議,就像我以前的評論一樣,使用PyCharm之類的其他方式代替它作爲解決方法。如果你得到任何信息,請隨時讓我知道:) –

回答