(Python)异常处理try...except、raise
admin
2024-05-22 06:26:00
0次

一、try...except

有时候我们写程序的时候,会出现一些错误或异常,导致程序终止。例如,做除法时,除数为0,会引起一个ZeroDivisionError

例子:

1

2

3

4

a=10

b=0

c=a/b

print "done"

运行结果:

Traceback (most recent call last):
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in
c=a/b
ZeroDivisionError: integer division or modulo by zero

我们发现程序因为ZeroDivisionError而中断了,语句print "done" 没有运行。为了处理异常,我们使用try...except,更改代码:

1

2

3

4

5

6

7

8

a=10

b=0

try:

    c=a/b

    print c

except ZeroDivisionError,e:

    print e.message

print "done"

  

运行结果:

integer division or modulo by zero
done

这样程序就不会因为异常而中断,从而print "done"语句正常执行。

我们把可能发生错误的语句放在try模块里,用except来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except后没有指定异常,则默认处理所有的异常。每一个try,都必须至少有一个except

处理一组异常可以这样写(其中e代表异常的实例):

1

2

3

4

try:

    pass

except (IOError ,ZeroDivisionError),e:

    print e

try ....except...else 语句,当没有异常发生时,else中的语句将会被执行。

例子:

1

2

3

4

5

6

7

8

9

10

a=10

b=0

try:

    c = b/ a

    print c

except (IOError ,ZeroDivisionError),x:

    print x

else:

    print "no error"

print "done"

运行结果:

0
no error
done

二、raise 引发一个异常

例子:如果输入的数据不是整数,则引发一个ValueError

1

2

3

4

5

inputValue=input("please input a int data :")

if type(inputValue)!=type(1):

    raise ValueError

else:

    print inputValue

假设输入1.2,运行结果为:

please input a int data :1.2
Traceback (most recent call last):
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in
raise ValueError
ValueError

如果输入1,运行结果为:

please input a int data :1
1

三、try ...finally 

无论异常是否发生,在程序结束前,finally中的语句都会被执行。

1

2

3

4

5

6

a=10

b=0

try:

    print a/b

finally:

    print "always excute"

运行结果:

Traceback (most recent call last):
always excute
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 4, in
print a/b
ZeroDivisionError: integer division or modulo by zero

虽然有异常发生,但在程序终止前,finally中的语句也能正常执行。。

finally语句也可以和except语句一起使用。

1

2

3

4

5

6

7

8

a=10

b=0

try:

    print a/b

except:

    print "error"

finally:

    print "always excute"

运行结果:

error

always excute

四、自定义一个异常类

自定义一个MyException类,继承Exception。

1

2

3

4

class MyException(Exception):

    def __init__(self,message):

        Exception.__init__(self)

        self.message=message   

如果输入的数字小于10,就引发一个MyException异常:

1

2

3

4

5

6

a=input("please input a num:")

if a<10:

    try:

        raise MyException("my excepition is raised ")

    except MyException,e:

        print e.message

  

运行结果:

please input a num:1
my excepition is raised

五、python所有的标准异常类:

异常名称描述
BaseException所有异常的基类
SystemExit解释器请求退出
KeyboardInterrupt用户中断执行(通常是输入^C)
Exception常规错误的基类
StopIteration迭代器没有更多的值
GeneratorExit生成器(generator)发生异常来通知退出
SystemExitPython 解释器请求退出
StandardError所有的内建标准异常的基类
ArithmeticError所有数值计算错误的基类
FloatingPointError浮点计算错误
OverflowError数值运算超出最大限制
ZeroDivisionError除(或取模)零 (所有数据类型)
AssertionError断言语句失败
AttributeError对象没有这个属性
EOFError没有内建输入,到达EOF 标记
EnvironmentError操作系统错误的基类
IOError输入/输出操作失败
OSError操作系统错误
WindowsError系统调用失败
ImportError导入模块/对象失败
KeyboardInterrupt用户中断执行(通常是输入^C)
LookupError无效数据查询的基类
IndexError序列中没有没有此索引(index)
KeyError映射中没有这个键
MemoryError内存溢出错误(对于Python 解释器不是致命的)
NameError未声明/初始化对象 (没有属性)
UnboundLocalError访问未初始化的本地变量
ReferenceError弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError一般的运行时错误
NotImplementedError尚未实现的方法
SyntaxErrorPython 语法错误
IndentationError缩进错误
TabErrorTab 和空格混用
SystemError一般的解释器系统错误
TypeError对类型无效的操作
ValueError传入无效的参数
UnicodeErrorUnicode 相关的错误
UnicodeDecodeErrorUnicode 解码时的错误
UnicodeEncodeErrorUnicode 编码时错误
UnicodeTranslateErrorUnicode 转换时错误
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于构造将来语义会有改变的警告
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告

  

相关内容

热门资讯

大渡河畔红色地标引游客 标题:赓续长征精神 奋进复兴征程|大渡河畔红色地标引游客国庆假期,各地游客来到位于四川省雅安市石棉县...
滇池东岸美食风物季丨10月6日... 秋日湖畔,音浪不息2026滇池东岸美食风物季持续火热10月6日滇池东岸将带来旷野歌者王金永的昆明专场...
从茶马古道到动车飞驰 松州古城... 四川在线记者王攀 川观新闻阿坝观察 刘文佳松潘县融媒体中心陈孙舟扬王小兰侯明磊10月5日早上8点,松...
从“面朝黄土”到奔赴“诗与远方... 新华社西安10月5日电(记者邹竞一、蔡馨逸)“等忙完这一阵,我就去北京,看天安门!”国庆假期,陕西西...
家国同框 | 佳节乡村游,我在... 朱明 摄家国同框 | 佳节乡村游,我在记录家国同框 | 佳节乡村游,我在记录家国同框 | 佳节乡村游...
双节无障碍文旅升温,多地景区探... 本报(chinatimes.net.cn)记者李氏琼 北京报道“您好,我们这里有免费提供的轮椅,请问...
吕梁碛口景区发布紧急提醒 尊敬的游客朋友:截至目前,碛口景区游客接待量已达到景区上限。为确保游览体验和旅游安全,请广大游客及时...
中英旅游,向文化体验更深处去 在英国泰晤士河畔,议会大厦、大本钟前,举着手机拍照的中国游客络绎不绝。有人拿出封面印有大本钟照片的高...
成都高新区“欢庆国庆·艺彩芳华... 封面新闻记者 易弋力10月5日,由成都高新区商务文化旅游局指导的“欢庆国庆·艺彩芳华”2026年高新...
花溪湖:山水之间见证城市蝶变 如今的花溪湖,波光潋滟,草木环生,已然是市民闲暇时散心休闲的好去处。岁月流转,这片水域迎来全新的蜕变...