python中的Error和Debugging
这是一个微软python课的笔记记录
这两个东西是完全不一样的事情,我们总把它当做是同义词,但实际上并不是。
Defining terms(定义术语)
Error handing(错误处理)
指的是当代码运行时有问题,当我把代码放到生产环境后,是无法云测的,最常见的例子比如权限问题、数据库改变和服务关闭等。这些都是无法控制的事情
Debugg(调试)
指的是我知道代码中有问题,存在出错的地方,可能会宕掉,而且我知道哪里出问题导致了代码出错
Debuging again(重申调试)
是指知道代码中存在问题,然后试图去修复,当程序外部发生一些无无法预测的事情时要使用 try,except,finally方法去解决,
Error types(错误类型)
下面是可能的错误类型
如果你的代码出现错误,选择错误类型就是很有必要的了
Syntax errors(语法错误)
代码示例:
x=42
y=206
if x==y
print('successful')
运行结果如下:
File "f:/workplace-vsc/one/new.py", line 3
if x==y
^
SyntaxError: invalid syntax
很显然运行出现了错误,但是同时运行的错误提示也给出了,是在第3行出现的错误。提示说的是无效的语法( invalid syntax ),为什么出现这个错误呢,其实就是缺少关键的字符。
Runtimely errors(运行错误)
x=42
y=0
print(x/y)
File "f:/workplace-vsc/one/new.py", line 3, in <module>
print(x/y)
ZeroDivisionError: division by zero
代码在运行中种出现问题,跑不了了。
这个案例的错误原因是我尝试除以0,当代码运行到地3行时,就会弹出上述错误提示信息,除以0( division by zero )
在运行的时候出错,可以让我们知道错在哪,从而去调试。1111111111111111111111111111111111111111111111111111111111
这里的基本解决错误的步骤是:
先看行号(例如:line 3)
然后找到出错的地方(例如:prrint(x/y))
注:当你处理运行时错误,错误就在你代码中【而不是你使用的框架或者运行内部出现了错误,不要找错重点。。不是说没有 只是很罕见】
补:Catching runtime errors
代码:
x=42
y=0
print()
try:
print(x/y)
except ZeroDivisionError as e:
print('sorry,something went wrong')
else:
print('sorry really went wrong')
finally:
print('this always runs on success or failure')
print()
运行:
sorry really went wrong
this always runs on success or failure
其实 try ,except,finall不是用来找bug的,bug定义的。bug是我代码中出错的地方,知错不改代码就无法运行,像用户输入这种无法掌控 try except,finally就是很有用的 但是你要是知道错误在哪,就不用了
logic errors(逻辑错误)
代码:
x=206
y=42
if x<y:
print(str(x)+'is greater than '+str(y))
运行如下:
PS F:\workplace-vsc\one> & D:/Anaconda3/envs/paddle_env/python.exe f:/workplace-vsc/one/new.py
PS F:\workplace-vsc\one>
运行结果为空
如果在后面加一句
else:
print(str(y)+' is greater than '+str(x))
加一句之后的娙结果:
PS F:\workplace-vsc\one> & D:/Anaconda3/envs/paddle_env/python.exe f:/workplace-vsc/one/new.py
42 is greater than 206
可以知道,是布尔值逻辑出现了错误
就先说到这里吧。