本节介绍以下python中的错误与异常,以及学会如何去自定义一个异常,这样有助于我们之后的调试。
在编写程序时可能会出现一些语法错误,这时系统会提示语法错误,比如类型错误,无效参数等,如下给出一个例子:
>>>while True print('Hello world')
File "" , line 1, in ?
while True print('Hello world')
^
SyntaxError: invalid syntax
在运行时有时会发生一些异常,比如分母作为0了,以下给出一个抛出异常的例子:
>>>10 * (1/0)
Traceback (most recent call last):
File "" , line 1, in ?
ZeroDivisionError: division by zero
常见的错误及异常关键词如下:
KeyboardInterrupt 用户中断执行(通常是输入^C)
Exception 常规错误的基类
StopIteration 迭代器没有更多的值
GeneratorExit 生成器(generator)发生异常来通知退出
StandardError 所有的内建标准异常的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零 (所有数据类型)
SyntaxError Python 语法错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
有时,对于异常我们可以加以限制,比如需要用户输入一个数,但是用户输入错误,抛出一个异常,系统可能中断,但这里我们可以采用一个异常处理,当抛出异常时重新让用户输入信息并给与提示。
这里就用到try语句,他可以尝试执行一句话如果抛出异常,则根据其异常的类别不同执行不同的语句。如下所示
try:
<语句> #运行代码
except <异常名字1>:
<语句> #如果在try代码引发了'异常名字1'异常,则执行这条语句
except <异常名字2>,<数据>:
<语句> #如果引发了'异常名字2'异常,并且获得附加的数据
else:
<语句> #如果没有异常发生
另外这里也可以不带异常名字,直接发生异常后执行一段代码。
下面给出一个让用户输入一个数字的代码,这里有个强制转换,如果转换失败应该会报出valueerror则打印输入错误。
while True:
try:
x = int(input("Please enter a number: "))
break
except ValueError:
print("Oops! That was no valid number. Try again ")
上述为检测一个异常的做法,在调试过程中,我们也可以自主的抛出异常,比如执行到某段程序,我们去测一下是否如我们所想像,如果不是我们想要的就让他抛出一个异常。
>>>raise NameError('HiThere')
Traceback (most recent call last):
File "" , line 1, in ?
NameError: HiThere
raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。
>>>try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
raise
An exception flew by!
Traceback (most recent call last):
File "" , line 2, in ?
NameError: HiThere
我们也可以定义一个自己的异常类,其作为Exception的类的继承,可以设置参数。
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
[1]菜鸟教程python3错误与异常http://www.runoob.com/python3/python3-errors-execptions.html