2016-12-05 8 views
0

У меня есть сценарий main.py в моем проекте, который запускает модель, которая организована в пакет python. Структура проекта выглядит следующим образом:IndexError: индекс индекса вне диапазона при попытке запустить cProflie

project/ 
    model/ 
     data/ 
      ... 
     __init__.py 
     ... 
    tests/ 
     ... 
    main.py 
    integrator.py 
    utils.py 

Когда я бегу main.py непосредственно т.е. python main.py он работает отлично. Тем не менее, я пытаюсь профиль main.py с помощью:

python -m cProfile -o main.py 

и получить следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "C:\Users\pbreach\Anaconda3\lib\runpy.py", line 184, in _run_module_as_main 
    "__main__", mod_spec) 
    File "C:\Users\pbreach\Anaconda3\lib\runpy.py", line 85, in _run_code 
    exec(code, run_globals) 
    File "C:\Users\pbreach\Anaconda3\lib\cProfile.py", line 160, in <module> 
    main() 
    File "C:\Users\pbreach\Anaconda3\lib\cProfile.py", line 155, in main 
    parser.print_usage() 
    File "C:\Users\pbreach\Anaconda3\lib\optparse.py", line 1587, in print_usage 
    print(self.get_usage(), file=file) 
    File "C:\Users\pbreach\Anaconda3\lib\optparse.py", line 1573, in get_usage 
    self.expand_prog_name(self.usage)) 
    File "C:\Users\pbreach\Anaconda3\lib\optparse.py", line 1550, in expand_prog_name 
    return s.replace("%prog", self.get_prog_name()) 
    File "C:\Users\pbreach\Anaconda3\lib\optparse.py", line 1545, in get_prog_name 
    return os.path.basename(sys.argv[0]) 
IndexError: list index out of range 

Я знаю разницу между python module.py и python -m module до степени this answer (не очень) ... Но я не уверен, что я здесь делаю неправильно. Из трассировки кажется, что недостаточно аргументов передано скрипту, но я не знаком с cProfile.

Любые идеи относительно того, почему эта ошибка возникает? Как я могу получить код в профиль?

ответ

1

Вы используете флаг -o, что означает, что вы ожидаете предоставить выходной файл после флага. Это также означает, что sys.argv не будет включать в себя main.py Попробуйте вместо этого: python -m cProfile -o output.txt main.py

Для ясности:

$ python -m cProfile -o output.txt main.py 
# |-----------------| 
# This part is the command 


$ python -m cProfile -o output.txt main.py 
#     |------------| 
# this is a named argument to the command. 


$ python -m cProfile -o output.txt main.py 
#         |-------| 
# this is a positional argument to the command. 
+0

Ач. хорошо, я должен был выбрать это из трассы. Просто предположил, что по какой-то причине это будет связано с чем-то, связанным с импортом (в последнее время это очень сложно). – pbreach

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

  • Нет связанных вопросов^_^