Почему скрипт Python не выводится на консоль или не может отлаживаться с помощью pdb в Ubuntu - PullRequest
0 голосов
/ 07 февраля 2019

Я смотрю на этот код .

. Для обучения lpr мы можем использовать train.py в папке lpr.

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 голосов
/ 07 февраля 2019

Я рекомендую следующее:

везде, где вы хотите отлаживать, поместите это:

import ipdb 
ipdb.set_trace()

Затем на консоли ipython создайте экземпляр вашего класса и вызовите методвам нужно отладить, он остановится в вашем следе

...