精华内容
下载资源
问答
  • python如何调试

    2019-09-23 15:46:31
    使用python自带工具pdb进行调试 法一: 进入调试模式:python-mpdb endorse.py pdb单步调试命令如下: 命令 解释 break或 b设置断点 设置断点 continue或 c ...

    使用python自带工具pdb进行调试

    法一:

    进入调试模式:python -m pdb endorse.py

    pdb单步调试命令如下:

    命令

    解释

    break 或 b 设置断点

    设置断点

    continue 或 c

    继续执行程序

    list 或 l

    查看当前行的代码段

    step 或 s

    进入函数

    return 或 r

    执行代码直到从当前函数返回

    exit 或 q

    中止并退出

    next 或 n

    执行下一行

    pp

    打印变量的值

    a

    查看全部栈内变量

    介绍下常用命令使用方法:

    先上代码 endorse.py

    import os,re
    from openpyxl import load_workbook
    path=r"C:\huyunan\test\excel\hu\IMS40701DM0hu.xlsx"
    file = open(r'center.txt','wb')
    
    workbook  = load_workbook(path)
    worksheets = workbook.sheetnames
    for sheet in worksheets:
        worksheet1 = workbook[u''+sheet]
        num_rows = worksheet1.max_row
        num_cols = worksheet1.max_column
        for rown in range(num_rows):
            for coln in range(num_cols):
                cell = worksheet1.cell(rown+1,coln+1).comment
                if cell is not None and "center" in cell.text:
                    file.write(cell.text.encode())
                    print(cell.text)
    file.close()

    进入调试模式输入b 11(11为行号)

    之后输入c指令执行代码,会在11行中断

    n命令是单步执行,不会进入函数内部。

    s命令是单步执行,会进入函数内部。

    指令a是打印出当前函数的参数值

    指令j 是跳转到某一行执行有点类似b和c指令结合,具体使用 j xx(xx为行数)

    指令q,退出pdb调试模式

    现在查看一下num_rows变量的值:pp num_rows

    法二:

    在py文件中导入pdb,然后再想定断点处加上:pdb.set_trace()

    执行:python endorse.py

    走到断点处会自动进入pdb。

    展开全文
  • 主要介绍了Python 如何调试程序崩溃错误,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • Python代码调试技巧2012-5-3简介: Debug 对于任何开发人员都...本文将主要阐述如何利用 python debug 相关工具进行 debug。使用pdb进行调试pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试...

    Python代码调试技巧

    2012-5-3

    简介: Debug 对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的定位错误,发现程序中的 bug。python 提供了一系列 debug 的工具和包,可供我们选择。本文将主要阐述如何利用 python debug 相关工具进行 debug。

    使用pdb进行调试

    pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些常用的调试命令,详情见表 1。

    表 1. pdb常用命令

    命令

    解释

    break或 b设置断点

    设置断点

    continue或 c

    继续执行程序

    list或 l

    查看当前行的代码段

    step或 s

    进入函数

    return或 r

    执行代码直到从当前函数返回

    exit或 q

    中止并退出

    next或 n

    执行下一行

    pp

    打印变量的值

    help

    帮助

    下面结合具体的实例讲述如何使用 pdb 进行调试。

    清单 1.测试代码示例

    import

    pdb

    a = "aaa"

    pdb.set_trace()

    b = "bbb"

    c = "ccc"

    final = a + b + c

    print final

    开始调试:直接运行脚本,会停留在 pdb.set_trace() 处,选择 n+enter 可以执行当前的 statement。在第一次按下了 n+enter 之后可以直接按 enter 表示重复执行上一条 debug 命令。

    清单 2.利用 pdb调试

    [root@rcc-pok-idg-2255

    ~]#  python epdb1.py

    > /root/epdb1.py(4)?()

    -> b = "bbb"

    (Pdb) n

    > /root/epdb1.py(5)?()

    -> c = "ccc"

    (Pdb)

    > /root/epdb1.py(6)?()

    -> final = a + b + c

    (Pdb) list

    1

    import pdb

    2

    a = "aaa"

    3

    pdb.set_trace()

    4

    b = "bbb"

    5

    c = "ccc"

    6

    -> final = a + b + c

    7

    print final

    [EOF]

    (Pdb)

    [EOF]

    (Pdb) n

    > /root/epdb1.py(7)?()

    -> print final

    (Pdb)

    退出 debug:使用 quit 或者 q 可以退出当前的 debug,但是 quit 会以一种非常粗鲁的方式退出程序,其结果是直接 crash。

    清单 3.退出 debug

    [root@rcc-pok-idg-2255

    ~]#  python epdb1.py

    > /root/epdb1.py(4)?()

    -> b = "bbb"

    (Pdb) n

    > /root/epdb1.py(5)?()

    -> c = "ccc"

    (Pdb) q

    Traceback (most recent call last):

    File "epdb1.py", line 5, in ?

    c = "ccc"

    File "epdb1.py", line 5, in ?

    c = "ccc"

    File

    "/usr/lib64/python2.4/bdb.py", line 48, in trace_dispatch

    return self.dispatch_line(frame)

    File

    "/usr/lib64/python2.4/bdb.py", line 67, in dispatch_line

    if self.quitting: raise BdbQuit

    bdb.BdbQuit

    打印变量的值:如果需要在调试过程中打印变量的值,可以直接使用 p 加上变量名,但是需要注意的是打印仅仅在当前的 statement 已经被执行了之后才能看到具体的值,否则会报 NameError:

    < exceptions.NameError … ....> 错误。

    清单 4. debug过程中打印变量

    [root@rcc-pok-idg-2255

    ~]#  python epdb1.py

    > /root/epdb1.py(4)?()

    -> b = "bbb"

    (Pdb) n

    > /root/epdb1.py(5)?()

    -> c = "ccc"

    (Pdb) p b

    'bbb'

    (Pdb)

    'bbb'

    (Pdb) n

    > /root/epdb1.py(6)?()

    -> final = a + b + c

    (Pdb) p c

    'ccc'

    (Pdb) p final

    *** NameError:

    instance at 0x1551b710 >

    (Pdb) n

    > /root/epdb1.py(7)?()

    -> print final

    (Pdb) p final

    'aaabbbccc'

    (Pdb)

    使用 c 可以停止当前的 debug 使程序继续执行。如果在下面的程序中继续有 set_statement() 的申明,则又会重新进入到 debug 的状态,读者可以在代码 print final 之前再加上 set_trace() 验证。

    清单 5.停止 debug继续执行程序

    [root@rcc-pok-idg-2255

    ~]#  python epdb1.py

    > /root/epdb1.py(4)?()

    -> b = "bbb"

    (Pdb) n

    > /root/epdb1.py(5)?()

    -> c = "ccc"

    (Pdb) c

    aaabbbccc

    显示代码:在 debug 的时候不一定能记住当前的代码块,如要要查看具体的代码块,则可以通过使用

    list 或者 l 命令显示。list 会用箭头 -> 指向当前 debug 的语句。

    清单 6. debug过程中显示代码

    [root@rcc-pok-idg-2255

    ~]#  python epdb1.py

    > /root/epdb1.py(4)?()

    -> b = "bbb"

    (Pdb) list

    1

    import pdb

    2

    a = "aaa"

    3

    pdb.set_trace()

    4

    -> b = "bbb"

    5

    c = "ccc"

    6     final = a + b + c

    7

    pdb.set_trace()

    8

    print final

    [EOF]

    (Pdb) c

    > /root/epdb1.py(8)?()

    -> print final

    (Pdb) list

    3

    pdb.set_trace()

    4

    b = "bbb"

    5

    c = "ccc"

    6

    final = a + b + c

    7

    pdb.set_trace()

    8  -> print final

    [EOF]

    (Pdb)

    在使用函数的情况下进行 debug

    清单 7.使用函数的例子

    import

    pdb

    def combine(s1,s2):      # define subroutine combine, which...

    s3 = s1 + s2 + s1    # sandwiches s2 between copies of s1, ...

    s3 = '"' + s3 +'"'   # encloses it in double quotes,...

    return s3            # and returns it.

    a = "aaa"

    pdb.set_trace()

    b = "bbb"

    c = "ccc"

    final = combine(a,b)

    print final

    如果直接使用 n 进行 debug 则到 final=combine(a,b) 这句的时候会将其当做普通的赋值语句处理,进入到 print final。如果想要对函数进行 debug 如何处理呢 ? 可以直接使用 s 进入函数块。函数里面的单步调试与上面的介绍类似。如果不想在函数里单步调试可以在断点处直接按 r 退出到调用的地方。

    清单 8.对函数进行 debug

    [root@rcc-pok-idg-2255

    ~]# python epdb2.py

    > /root/epdb2.py(10)?()

    -> b = "bbb"

    (Pdb) n

    > /root/epdb2.py(11)?()

    -> c = "ccc"

    (Pdb) n

    > /root/epdb2.py(12)?()

    -> final = combine(a,b)

    (Pdb) s

    --Call--

    > /root/epdb2.py(3)combine()

    -> def combine(s1,s2):      # define subroutine combine, which...

    (Pdb) n

    > /root/epdb2.py(4)combine()

    -> s3 = s1 + s2 + s1    # sandwiches s2 between copies of s1, ...

    (Pdb) list

    1

    import pdb

    2

    3

    def combine(s1,s2):      #

    define subroutine combine, which...

    4

    ->     s3 = s1 + s2 + s1    # sandwiches s2 between copies of s1, ...

    5

    s3 = '"' + s3 +'"'   #

    encloses it in double quotes,...

    6

    return s3            # and

    returns it.

    7

    8

    a = "aaa"

    9

    pdb.set_trace()

    10

    b = "bbb"

    11

    c = "ccc"

    (Pdb) n

    > /root/epdb2.py(5)combine()

    -> s3 = '"' + s3 +'"'   # encloses it in double quotes,...

    (Pdb) n

    > /root/epdb2.py(6)combine()

    -> return s3            # and returns it.

    (Pdb) n

    --Return--

    >

    /root/epdb2.py(6)combine()->'"aaabbbaaa"'

    -> return s3            # and returns it.

    (Pdb) n

    > /root/epdb2.py(13)?()

    -> print final

    (Pdb)

    在调试的时候动态改变值 。在调试的时候可以动态改变变量的值,具体如下实例。需要注意的是下面有个错误,原因是 b 已经被赋值了,如果想重新改变

    b 的赋值,则应该使用! B。

    清单 9.在调试的时候动态改变值

    [root@rcc-pok-idg-2255

    ~]# python epdb2.py

    > /root/epdb2.py(10)?()

    -> b = "bbb"

    (Pdb) var = "1234"

    (Pdb) b = "avfe"

    *** The specified object '=

    "avfe"' is not a function

    or was not found along sys.path.

    (Pdb) !b="afdfd"

    (Pdb)

    pdb 调试有个明显的缺陷就是对于多线程,远程调试等支持得不够好,同时没有较为直观的界面显示,不太适合大型的 python 项目。而在较大的 python 项目中,这些调试需求比较常见,因此需要使用更为高级的调试工具。

    展开全文
  • 程序能一次写完并正常运行的概率很小,基本不超过1%。...下面本篇文章就来给大家介绍一下python调试的方法,希望对你们有所帮助。方法一:print用print把可能有问题的变量打印出来看看,这种方法最是简单...

    程序能一次写完并正常运行的概率很小,基本不超过1%。总会有各种各样的bug需要修正。有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误的,因此,需要一整套调试程序的手段来修复bug。下面本篇文章就来给大家介绍一下python调试的方法,希望对你们有所帮助。

    8cc1604780171e74a55d1de42ca662c6.png

    方法一:print

    用print把可能有问题的变量打印出来看看,这种方法最是简单直接粗暴有效了。# err.py

    def foo(s):

    n = int(s)

    print '>>> n = %d' % n

    return 10 / n

    def main():

    foo('0')

    main()

    执行后在输出中查找打印的变量值:$ python err.py

    >>> n = 0

    Traceback (most recent call last):

    ...

    ZeropisionError: integer pision or modulo by zero

    用print最大的坏处是将来还得删掉它,想想程序里到处都是print,运行结果也会包含很多垃圾信息。

    方法二:assert(断言)

    凡是用print来辅助查看的地方,都可以用断言(assert)来替代:# err.py

    def foo(s):

    n = int(s)

    assert n != 0, 'n is zero!'

    return 10 / n

    def main():

    foo('0')

    assert的意思是,表达式n != 0应该是True,否则,后面的代码就会出错。

    如果断言失败,assert语句本身就会抛出AssertionError:$ python err.py

    Traceback (most recent call last):

    ...

    AssertionError: n is zero!

    程序中如果到处充斥着assert,和print相比也好不到哪去。不过,启动Python解释器时可以用-O参数来关闭assert:$ python -O err.py

    Traceback (most recent call last):

    ...

    ZeropisionError: integer pision or modulo by zero

    关闭后,你可以把所有的assert语句当成pass来看。

    方法三:logging

    也可以把print替换为logging,和assert比,logging不会抛出错误,而且可以输出到文件:# err.py

    import logging

    s = '0'

    n = int(s)

    logging.info('n = %d' % n)

    print 10 / n

    logging.info()就可以输出一段文本。运行,发现除了ZeropisionError,没有任何信息。怎么回事?

    别急,在import logging之后添加一行配置再试试:import logging

    logging.basicConfig(level=logging.INFO)

    看到输出了:$ python err.py

    INFO:root:n = 0

    Traceback (most recent call last):

    File "err.py", line 8, in

    print 10 / n

    ZeropisionError: integer pision or modulo by zero

    这就是logging的好处,它允许你指定记录信息的级别,有debug,info,warning,error等几个级别,当我们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debug和info就不起作用了。这样一来,你可以放心地输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息。

    logging的另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如console和文件。

    方法四:调试器pdb

    启动Python的调试器pdb,让程序以单步方式运行,可以随时查看运行状态。我们先准备好程序:# err.py

    s = '0'

    n = int(s)

    print 10 / n

    然后启动:$ python -m pdb err.py

    > /Users/michael/Github/sicp/err.py(2)()

    -> s = '0'

    以参数-m pdb启动后,pdb定位到下一步要执行的代码-> s = '0'。输入命令l来查看代码:(Pdb) l

    1 # err.py

    2 -> s = '0'

    3 n = int(s)

    4 print 10 / n

    [EOF]

    输入命令n可以单步执行代码:(Pdb) n

    > /Users/michael/Github/sicp/err.py(3)()

    -> n = int(s)

    (Pdb) n

    > /Users/michael/Github/sicp/err.py(4)()

    -> print 10 / n

    任何时候都可以输入命令p 变量名来查看变量:(Pdb) p s

    '0'

    (Pdb) p n

    0

    输入命令q结束调试,退出程序:(Pdb) n

    ZeropisionError: 'integer pision or modulo by zero'

    > /Users/michael/Github/sicp/err.py(4)()

    -> print 10 / n

    (Pdb) q

    这种通过pdb在命令行调试的方法理论上是万能的,但实在是太麻烦了,如果有一千行代码,要运行到第999行得敲多少命令啊。

    小结

    写程序最痛苦的事情莫过于调试,程序往往会以你意想不到的流程来运行,你期待执行的语句其实根本没有执行,这时候,就需要调试了。

    展开全文
  • 应该用过 IPython 吧?想象一下,抛出异常时自动把你带到 IPython Shell 是不是很开心?而且和普通的IPython不同,这个时候可以调用 p (print), up(up stack), down(down stack) 之类的命令。还能创建临时变量,执行...

    应该用过 IPython 吧?想象一下,抛出异常时自动把你带到 IPython Shell 是不是很开心?而且和普通的IPython不同,这个时候可以调

    用 p (print), up(up stack), down(down stack) 之类的命令。还能创建临时变量,执行任意函数。

    事实上这是可以实现的, 而且很简单,不过你要先安装 IPython。然后把以下代码保存为 `crash_on_ipy.py`import sysclass ExceptionHook:

    instance = None

    def __call__(self, *args, **kwargs):

    if self.instance is None:

    from IPython.core import ultratb

    self.instance = ultratb.FormattedTB(mode='Plain',

    color_scheme='Linux', call_pdb=1)

    return self.instance(*args, **kwargs)sys.excepthook = ExceptionHook()

    然后在你的项目代码某个地方 import crash_on_ipy 就可以了。

    云海天教程网,免费的云海天教程网站,欢迎在线学习!

    展开全文
  • b=“afdfd” (Pdb) pdb 调试有个明显的缺陷就是对于多线程,远程调试等支持得不够好,同时没有较为直观的界面显示,不太适合大型的 python 项目。而在较大的 python 项目中,这些调试需求比较常见,因此需要使用更为...
  • python如何调试

    2017-06-20 15:34:00
    在执行shell脚本的时候,可以sh -x来...1.可以使用pdb来进行调试,举例如下 代码及运行结果如下: [root@node100 vagrant]# cat kwargs.py #!/usr/bin/python def test_kwargs(farg,*argvs,**kwargs): pr...
  • 解决方案如果你的程序因为某个异常而崩溃,运行 python3 -i someprogram.py 可执行简单的调试。 -i 选项可让程序结束后打开一个交互式shell。 然后你就能查看环境,例如,假设你有下面的代码:# sample.pydef func(n...
  • 如题,由c++编译dll提供接口给python...请问各位有没有好的调试方法。通过return返回值的方法已经被使用了,其实最好的解决方案是能够在python的控制台下有输出,请问这两个之间有没有什么方法,或者其他的解决方案。
  • python import threading import binascii import time import re import struct import asyncio import serial from serial.tools import list_ports import datetime def write_ser(com, cmd, logpath=None): ...
  • 如何用 fiddler 代理调试本地手机页 一文中我们了解了如何用手机查看 PC 端写的网页(本地),但是我们只能看到页面效果,如果哪段 js 挂了,那部分样式失效了,我们该如何进行调试呢?今天为大家介绍的 UC 浏览器...
  • 将手机与PC通过USB连接,并且打开手机的“USB调试”(设置--开发者选项--USB调试)。 5.PC安装手机驱动(类似于360手机工具或者豌豆荚,直接下载安装即可),保证PC能与手机顺利连接。 6.运行“cmd”,执行"adb forward ...
  • 1 关于RI目前,在手机上使用浏览器访问网页,无法便捷地进行网页语言调试。手机屏幕相对较小且操作不便,直接在手机上进行网页数据调试不太现实。因此,我们使用技术将手机网页调试信息分离,实现一种能在大屏幕、高...
  • UC浏览器开发者工具可以帮助用户在软件快速调试自己开发的项目,连接到远程的设备就可以开始调试,对于需要在浏览器开发新内容的朋友很适合,这款软件支持TCP调试,将调试的目标输入到软件就可以实现远程调试,也...
  • PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取chrome 开发者工具当我们爬取不同的网站是,每个网站页面的实现方式各不相同,我们需要对每个网站都进行分析。那是否有一些通用的分析方法?我分享下...
  • 可能您可以在API调用运行时使用^{}和^{}删除调试器,但不建议这样做,而且PyCharm会在您这样做时向您投诉:PYDEV DEBUGGER WARNING:sys.settrace() should not be used when the debugger is being used.This may ...
  • 有时候使用爬虫会被网站封了IP,所以需要去模拟浏览器,隐藏用户身份,UserAgent包含浏览器信息,用户身份,设备系统信息UserAgent:用户代理,简称UA,属于headers的一部分,服务器通过UA来判断访问者身份使用方法...
  • Python怎么单步调试?下面给大家介绍一下单步调试:方法一:执行 python -m pdb myscript.py(Pdb) 会自己主动停在第一行。等待调试,这时你能够看看帮助。方法二:在所调试程序的开头中:import pdb 并在你的代码行...
  • Python怎么单步调试?下面给大家介绍一下单步调试:方法一:执行 python -m pdb myscript.py(Pdb) 会自己主动停在第一行。等待调试,这时你能够看看帮助。方法二:在所调试程序的开头中:import pdb 并在你的代码行...
  • 一般开发者都是在IDE中进行程序的调试,当然,有IDE的话,当然首选IDE进行调试。...pdb简介pdb 调试器是 Python 标准库提供的,因此最为方便,不需要安装其他组件,直接 import 后就能使用。pdb 调试器提供了调试所...
  • 你是如何在Flask中调试错误的? 打印到控制台? Flash消息到页面? 还是有更强大的选项可用来找出出现问题时发生的情况?app.run()没有任何神奇之处(无论是打开还是关闭调试)。 Flask的行为与任何其他python应用程序...
  • 使用 pdb 进行调试pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些...
  • 一般开发者都是在 IDE 中进行程序的调试,当然,有 IDE 的话,当然首选 IDE 进行...pdb简介pdb 调试器是 Python 标准库提供的,因此最为方便,不需要安装其他组件,直接 import 后就能使用。pdb 调试器提供了调试所...
  • 给大家推荐本我自己写的电子书《PyCharm中文指南》,把各种 PyCharm 的高效的使用技巧用GIF动态图的形式展示出来。有兴趣的可以看它的在线文档:http://pycharm.iswbm.com对于每个...调试一下看看调试的方法多种多样...
  • “贫民版”调试工具——PySnooper一般情况下,在编写 Python 代码时,如果想弄清楚为什么 Python 代码没有按照预期执行的原因,比如你想知道哪些是正在运行,哪些没有运行,以及局部变量的值是什么...通常我们会使用...
  • python 调试Python编程语言的强大功能和灵活性源于强大的标准库和丰富的第三方软件生态系统。 Python程序员可以利用许多有用的工具,并且这些工具也可以扩展到调试。 可以使用许多具有调试功能的Python IDE, ...
  • Debug 对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的...使用 pdb 进行调试pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,245
精华内容 898
关键字:

python如何调试

python 订阅