IndexError:尝试运行cProflie

时间:2016-12-05 20:46:58

标签: python python-3.x python-module cprofile index-error

我的项目中有一个main.py脚本,它运行一个组织成python包的模型。项目结构如下所示:

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.pypython -m module之间的区别this answer(非常)......但我不确定我是什么&#39;我在这里做错了。从回溯看来,似乎没有足够的参数传递给脚本,但我对cProfile并不熟悉。

关于为什么会出现此错误的任何想法?如何获取要分析的代码?

1 个答案:

答案 0 :(得分: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.