设为首页 加入收藏

TOP

Python语法基础-函数,类以及调试处理(四)
2019-01-11 16:08:46 】 浏览:205
Tags:Python 语法 基础 函数 以及 调试 处理
oDivisionError: division by zero END # 继续执行了
  • 通过配置,logging还可以把错误记录到日志文件里,方便事后排查

(4.3).自定义抛出raise错误

class FooError(ValueError):
    pass

def foo(s):
    n = int(s)
    if n==0:
        raise FooError('invalid value: %s' % s)
    return 10 / n
foo('0')

# 结果
Traceback (most recent call last):
  File "err_throw.py", line 11, in <module>
    foo('0')
  File "err_throw.py", line 8, in foo
    raise FooError('invalid value: %s' % s)
__main__.FooError: invalid value: 0

5. 调试

方法 优点 缺点
print方法 简单使用 重复多
assert 简单使用 重复多
logging 不会抛出错误,可以输入文档 重复多
pdb python内置调试器 重复多
VS Code 强强强

(5.1).print方法(略过)

(5.2).断言assert

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

def foo(s):
    n = int(s)
    assert n != 0, 'n is zero!'
    return 10 / n

def main():
    foo('0')

# 结果
Traceback (most recent call last):
  ...
AssertionError: n is zero!

assert的意思是,表达式n != 0应该是True,否则,根据程序运行的逻辑,后面的代码肯定会出错。如果断言失败,assert语句本身就会抛出AssertionError

(5.3).logging

print()替换为logging是第3种方式,和assert比,logging不会抛出错误,而且可以输出到文件:

import logging
logging.basicConfig(level=logging.INFO)

s = '0'
n = int(s)
logging.info('n = %d' % n)
print(10 / n)

# 结果
INFO:root:n = 0
Traceback (most recent call last):
  File "err.py", line 8, in <module>
    print(10 / n)
ZeroDivisionError: division by zero

logging可以指定不同信息的级别

  • debug
  • info
  • warning
  • error

(5.4).pdb.set_trace()

我们只需要import pdb,然后,在可能出错的地方放一个pdb.set_trace(),就可以设置一个断点

import pdb

s = '0'
n = int(s)
# 暂停并进入pdb调试环境
pdb.set_trace() # 运行到这里会自动暂停
print(10 / n)

(5.5). IDE

直接在代码中设置断掉调试

graph TD; A-->B; A-->C; B-->D; C-->D;
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python 内置函数笔记 下一篇hyper-v中搭建本地服务器linux(Ce..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目