Python基础学习(二)错误与异常

Python基础学习(二)错误与异常

本节介绍以下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

你可能感兴趣的:(Python)