python 调试方法总结

本文介绍了Python调试中的关键方法,包括如何使用raise抛出异常、理解和利用反向跟踪、运用assert断言检查代码逻辑、记录日志以及使用IDLE的调试器。通过示例,阐述了断言在确保程序正确性中的作用,异常处理和日志记录在捕获和追踪错误中的价值,以及调试器在单步执行和查看变量值方面的帮助。
摘要由CSDN通过智能技术生成

说在前面

我觉得没有什么错误是调试器无法解决的,如果没有,那我再说一遍,如果有,那当我没说

一、抛出异常

可以通过 raise 语句抛出异常,使程序在我们已经知道的缺陷处停下,并进入到 except 语句
 

raise句法:

raise关键字

调用的异常函数名 ValueError (这个函数必须是异常类或一个实例)

传递给 ValueError 的字符串,包含有用的出错信息

>>> raise ValueError('This is a error message')
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    raise ValueError('This is a error message')
ValueError: This is a error message

然后使用 try...except 语句来对抛出的异常做处理

通常我们在函数本身中抛出异常,然后在调用该函数的地方使用 try...except 语句处理异常

#定义一个简单的int类型的加法器
def calculator(num1,num2):
    if isintance(num1,int)and isintance(num2,int):
        raise Exception('Symbol must be a int type number.')
    return num1+num2
 
print('please enter two number:')
num1=input()
num2=input()
#在调用函数的地方使用try语句
try:
    print(calculator(num1,num2))
except Exception as err:
    print('发生了一个错误:'+str(err))
#另一种使用情况
try:
            print(key)
            return self[key]
        except KeyError:#如果在上面遇见了keyError
            raise AttributeError(r"'%s' don't have attribute '%s'"%#就抛出这个AttributeError类型的错误,顺序别弄错<br>(self.__class__.name,key))

注意上面的 as 语句取得 str ,如果不取也是可以的
  
运行示例:

RESTART: C:/Users/Administrator.SC-201605202132/AppData/Local/Programs/Python/Python37/boxPrint.py 
please enter two number:
s
发生了一个错误:name 'isintance' is not defined
>>>

二、取的反向跟踪的字符串

当程序运行出现错误时,python会生成一些错误信息,这些错误信息被称为“反向跟踪”,它包含了出错信息、导致该错误的代码行号,和导致 该错误的函数调用 的 序列,这个序列被称为调用栈。

只要抛出的异常没有被处理,python就会显示反向跟踪

以下面程序来展示我们对反向跟踪的解读

def spam():
    bacon()
def bacon():
    raise Exception('This is the error message')
 
spam()

这就是反向跟踪:

Traceback (most recent call last):
  File "C:/Users/Administrator.SC-201605202132/AppData/Local/Programs/Python/Python37/errorExample.py", line 6, in <module>
    spam()
  File "C:/Users/Administrator.SC-201605202132/AppData/Local/Programs/Python/Python37/errorExample.py", line 2, in spam
    bacon()
  File "C:/Users/Administrator.SC-201605202132/AppData/Local/Programs/Python/Python37/errorExample.py", line 4, in bacon
    raise Exception('This is the error message')
Exception: This is the error message

我们应该从下往上阅读方向跟踪,通过反向跟踪我们可以知道,这个错误发生在第5行,在bacon函数中;这次特定的bacon调用发生在第2行,spam函数中,而spam函数又是在第6行被调用的。这样,在从多个位置调用函数的程序中,调用栈就能帮助你确定那次调用导致了错误。

调用 traceback.format_exc() 得到反向跟踪的字符串形式

前面说过,如果抛出的异常没有被处理,python才会显示反向跟踪。假如我们既想用except处理错误,又想要获得出错信息,就可以用这个函数,需要导入 traceback 模块

例如,我们可以在程序出现错误时还能继续运行,同时把错误信息记录到日志中。在程序结束后调试程序时,我们就根据日志里记录的信息去调试

>>> import traceback
>>> try:
    raise Exception('This is a error message')
except:
    errorFile=open('errorInfo.txt','w')
    errorFile.write(traceback.format_exc())  #使用tracback.format_exc()获得反向跟踪的字符串形式
    errorFile.close()
    print('The traceback info was written to errorInfo.txt')
 
     
112    #返回的是写入的字符个数
The traceback info was written to errorInfo.txt
>>>

errorInfo.txt的内容&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值