python调试方法

廖雪峰官方网站

assert(断言,当程序出现期望之外的情况时,执行语句)

从功能上看跟if有些相同的地方,我们可以使用if进行预判,将可能产生的错误提前预知并处理。而assert是给定一个条件,条件之外的情况都是错误,它本身是一个用来判断错误的class,输出的是一个错误class的实例。

一般用在需要调试的代码的部分,方便记录变量信息,去定位出现问题的变 量。
如下:

import logging
def fun(e):
        n=int(e)
        assert n!=0,'n=%d' % n
        return 10/n
fun(0)

运行结果为:

>>> 
============================= RESTART: C:\日常学习代码.py ============================
Traceback (most recent call last):
  File "C:\日常学习代码.py", line 6, in <module>
    fun(0)
  File "C:\日常学习代码.py", line 4, in fun
    assert n!=0,'n=%d' % n#当调试很多时,会出现大量的assert
AssertionError: n=0#提示的是AssertionError,并不是ZeroDivitionError
>>> 

当代码中需要调试的部分很多,程序中就会出现很多的assert,在其中编译器时可以用-O参数来关闭assert,也就是通过CMD命令行启动时加上 -O。

Microsoft Windows [版本 10.0.18362.239]
(c) 2019 Microsoft Corporation。保留所有权利。

C:\Users\易小白>cd C:\
#不关闭assert前:
C:\>python 日常学习代码.py
Traceback (most recent call last):
  File "日常学习代码.py", line 5, in <module>
    fun(0)
  File "日常学习代码.py", line 3, in fun
    assert n!=0,'n=%d' % n
AssertionError: n不能为0
#关闭assert后:
C:\>python -O 日常学习代码.py#使用命令-O启动关闭assert模式,是英文字母O
Traceback (most recent call last):
  File "日常学习代码.py", line 5, in <module>
    fun(0)
  File "日常学习代码.py", line 4, in fun
    return 10/n
ZeroDivisionError: division by zero#只提示错误,不显示assert,跟不使用assert的报错一样

logging.info():记录错误,类似装饰器,并不影响程序本体

运用logging.info()可以达到使用print一样打印出一个变量,区别在于print显示的变量,只能在程序中删除print代码才能关闭,而logging.info()没有配置是不会执行的:

import logging
#logging.basicConfig(level=logging.INFO)
e='0'
n=int(e)
logging.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值