为什么Python脚本无法打印到控制台或无法在Ubuntu中使用pdb进行调试

时间:2019-02-07 03:21:04

标签: python python-3.x tensorflow python-3.5

我正在研究这个code

对于培训lpr,我们可以在lpr文件夹中使用train.py

train.py使用trainer.py中的方法和类,例如CTCUtils, InputData, inference and LPRVocab.

我将打印内容放在LPRVocab中,以查看代码的工作方式如下。

class LPRVocab:
  @staticmethod
  def create_vocab(train_list_path, val_list_path, use_h_concat=False, use_oi_concat=False):
    print('create_vocab called ')
    [vocab, r_vocab, num_classes] = LPRVocab._create_standard_vocabs(train_list_path, val_list_path)
    if use_h_concat:
      [vocab, r_vocab, num_classes] = LPRVocab._concat_all_hieroglyphs(vocab, r_vocab)
    if use_oi_concat:
      [vocab, r_vocab, num_classes] = LPRVocab._concat_oi(vocab, r_vocab)

    return vocab, r_vocab, num_classes

  @staticmethod
  def _char_range(char1, char2):
    """Generates the characters from `char1` to `char2`, inclusive."""
    for char_code in range(ord(char1), ord(char2) + 1):
      yield chr(char_code)

  # Function for reading special symbols
  @staticmethod
  def _read_specials(filepath):
    characters = set()
    with open(filepath, 'r') as file_:
      for line in file_:
        current_label = line.split(' ')[-1].strip()
        characters = characters.union(re.findall('(<[^>]*>|.)', current_label))
    return characters

  @staticmethod
  def _create_standard_vocabs(train_list_path, val_list_path):
    print('_create_standard_vocabs called ')
    chars = set().union(LPRVocab._char_range('A', 'Z')).union(LPRVocab._char_range('0', '9'))
    print(chars)
    print('for special characters')
    chars = chars.union(LPRVocab._read_specials(train_list_path)).union(LPRVocab._read_specials(val_list_path))
    print(chars)
    print('for list characters')
    chars = list(chars)
    print(chars)
    print('for sort characters')
    chars.sort()
    print(chars)
    print('for append characters')
    chars.append('_')
    print(chars)    
    num_classes = len(chars)
    print('num_classes '+str(num_classes))
    vocab = dict(zip(chars, range(num_classes)))
    print('vocab ')
    print(vocab)
    r_vocab = dict(zip(range(num_classes), chars))
    r_vocab[-1] = ''
    print('r_vocab ')
    print(r_vocab)
    return [vocab, r_vocab, num_classes]

但是我看不到任何打印内容。

然后我用

python -m pdb train.py 

然后在trainer.py中设置断点。 断点永远不会被击中。 按键S也不会使其他文件详细。

为什么调试不起作用且打印无法打印到控制台? 我用的是python3.5。

1 个答案:

答案 0 :(得分:0)

我建议以下内容:

无论您想调试的地方,将其放置:

import ipdb 
ipdb.set_trace()

然后在ipython控制台上,创建您的类的实例,然后调用您需要调试的方法,它将停止在您的跟踪中