欢迎来到python大讲堂,打开你的IDE开始python之旅吧!
语法错误
python在运行时可能会出现一些错误,我们首先来讲语法错误
语法错误也就是解析错误,看看下面的例子:
for i in range(10)
print(i)
这里明显少加了一个冒号,引发的错误如下所示:
for i in range(10)
^
SyntaxError: invalid syntax
Process finished with exit code 1
在错误的地方会标一个小箭头,也就是出错的地方,exit code 1
就代表因为错误结束程序,exit code 0
就是程序正常执行完成结束,exit code -1
就是手动结束程序。
异常
有时候你的语法是正确的,但是运行期间发生了错误,像下面这样:
print(1/0)
这句语句显然语法没有问题,但是仔细观察后会发现不能将0作为被除数,报错如下:
Traceback (most recent call last):
print(1/0)
ZeroDivisionError: division by zero
traceback就代表异常,上面这里引发了ZeroDivisionError,也就是被除数不能为0的错误。
处理异常
try:
x = int(input("Please enter a number: "))
except ValueError:
print("invalid number!")
- 首先执行try下的语句,如果没有发生错误,则跳过except
- 如果发生了异常,那么如果异常名称与except后的名称一样就执行except
- 如果名称与except后的名称不匹配,则抛出错误
接下来你可以试着输入#或者*之类的东西,你会看到这样的结果:
Please enter a number: #
invalid number!
Process finished with exit code 0
这时程序也会正常结束,接下来试着把这段程序改一下:
try:
x = int(input("Please enter a number: "))
except ZeroDivisionError:
print("invalid number!")
这时候你会得到:
Please enter a number: #
Traceback (most recent call last):
x = int(input("Please enter a number: "))
ValueError: invalid literal for int() with base 10: '#'
因为这时异常名称不匹配,所以抛出异常,再这样改:
try:
x = int(input("Please enter a number: "))
except ZeroDivisionError:
print(‘No zero!')
except ValueError as e:
print(e)
print("invalid number!")
raise
except:
print('unknown error!')
你可以把最后一个except当作处理所有错误的语句,其次通过在except后面加上as e(随便你起)就可以通过print(e)
的方式打印出异常了。
raise就是抛出异常,因此你会看到在你输入#号时,同时输出了异常,invalid number!和抛出异常:
Please enter a number: #
invalid literal for int() with base 10: '#' #输出异常
Traceback (most recent call last):
invalid number! #输出invalid number!
x = int(input("Please enter a number: "))
ValueError: invalid literal for int() with base 10: '#' #抛出异常
except还有一个可选的else自句,在try没有发生错误时执行,这里就不再赘述
我们还能自定义异常类型和输出的东西,像这样:raise ValueError('invalid number')
finally子句
还有一个可选的finally语句,见下:
try:
x = int(input("Please enter a number: "))
except ValueError:
raise ValueError('ValueError')
finally:
print('finally')
结果:
Please enter a number: #
Traceback (most recent call last):
finally #输出finally
x = int(input("Please enter a number: "))
ValueError: invalid literal for int() with base 10: '#' #抛出异常
结束啦!下次见!