2016-08-10 2 views
0

Новое для python. Я хочу остановить мой код в основном для цели отладки. Я использую модуль регистрации для печати значения переменной, которое я хотел бы проверить.python sys.exit: требуется целое число (получен тип str)?

Однако это вызывает ошибку. Не знаете, как его решить. Мне также интересно использовать sys.exit вместо настройки точки отладки - это правильный способ запускать только небольшую часть кода. Мой главный длинный, и я не хочу каждый раз запускать все это.

import linecache 
import logging 
import sys 

import pandas as pd 


def print_exception(): 
    exc_type, exc_obj, tb = sys.exc_info() 
    f = tb.tb_frame 
    lineno = tb.tb_lineno 
    filename = f.f_code.co_filename 
    linecache.checkcache(filename) 
    line = linecache.getline(filename, lineno, f.f_globals) 
    print('EXCEPTION IN ({}, LINE {} "{}"): {}'.format(filename, lineno, line.strip(), exc_obj)) 


if __name__ == "__main__": 
    try: 
     logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') 
     df = pd.DataFrame({'A': [0, -1, 3, 5, 4, 2, 1], 
          'B': [12, 12, 14, 15, 14, 16, 200]}) 

     sys.exit('error') 



    except: 
     print_exception() 

EXCEPTION IN (<ipython-input-9-f42a2adee11e>, LINE 49 "sys.exit('error')"): an integer is required (got type str) 

Обновления: Я обновил полный код. Я нахожусь на python3 с Pycharm.

+4

Я не думаю, что это так же тривиально, как другие делают это. Использование OP sys.exit в OP соответствует документам. – Karin

+5

@wim этот код отлично работает на Python 2.7.8 и согласуется с документацией sys.exit(). Я подозреваю, что есть проблема контекста где-то, что нет в этом коде (поскольку, очевидно, это не 49 строк). – Lost

+1

@Karin Я согласен, я думаю, что люди берут ошибку за чистую монету, но что-то происходит, так как это использование отлично работает для меня как в Linux, так и в окнах в быстром тестировании и соответствует документации. Не пробовал Python 3 еще – Lost

ответ

3

Из комментария дискуссии, я подозреваю, ваша проблема в том, что PyCharm пытается справиться с sys.exit() внутри, и это не подобно тому, как вы используете собственное сообщение об ошибке. Аналогичные проблемы возникают и в других IDE, таких как Python logging, которые не работают должным образом в Spyder (май или, возможно, не были разрешены к настоящему времени).

Ваше использование само по себе является действительным и согласуется с документацией для Python3, и у меня не было проблем с запуском вашего кода в моей системе, и он выполнялся так, как ожидалось.

Я предлагаю вам попробовать запустить код с Python напрямую и не использовать PyCharm и посмотреть, устраняет ли это проблему. Если Python3 ваша установка Python по умолчанию, вы должны иметь только открыть строку BASH Terminal или Command в каталоге файла и типа:

python file-name.py 

Для запуска программы в терминале. Я подозреваю, что это будет работать нормально, и то, что вы действительно сделали здесь, не отлаживает вашу программу, а обнаруживает ошибку (или функцию) в pycharm.

-7

Вам нужно целое число - традиционный код возврата Unix (0 без ошибок и что-то большее, чем 0 для чего-то плохого).

С точки зрения отладки, вы должны попробовать IDLE IDE или pdb

+4

Это неверно. По крайней мере, в python 2.7 это действительный код. Должна быть другая проблема – Glostas

+1

Это также неверно в Python 3. См. Ссылку docs в моем комментарии к вопросу. –

Смежные вопросы