python3 抛出异常_Python3 & 异常

一、错误

语法错误:使用 Pycharm 工具编写 Python 程序,编译器就会检测出来并给予提示,因此,编写好的程序几乎不会出现错误。

逻辑错误:编译器不会提示,例如:0作为被除数

二、异常

Python 程序语法正确,在运行时,有可能发生错误,运行期检测到的错误被称为异常;大多数的异常都不会被程序处理,会以错误信息的形式展现。

1、捕获所有异常

语法:

try:

可能发⽣错误的代码

except:

如果出现异常执⾏的代码

2、捕获指定异常

语法:

try:

可能发⽣错误的代码

except :

如果出现异常执⾏的代码

3、万能异常

语法:

try:

可能发⽣错误的代码

except Exception:

如果出现异常执⾏的代码

4、捕获多个异常

1)不区分优先级

语法:

try:

可能发⽣错误的代码

except (, , ...):

如果出现异常执⾏的代码

2)区分优先级

语法:

try:

可能发⽣错误的代码

except :

如果出现异常执⾏的代码1

except :

如果出现异常执⾏的代码2

except :

如果出现异常执⾏的代码3

该种异常处理语法的规则是:

执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。

如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。

如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。

如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。

3)处理多个异常(没有捕获异常就执行else语句)

如果判断完没有某些异常之后还想做其他事,就可以使用else语句。

else 子句只能出现在所有 except 子句之后,只有在没有出现异常时执行。

语法:

try:

可能发⽣错误的代码

except :

如果出现异常执⾏的代码1

except :

如果出现异常执⾏的代码2

else:

# try语句中没有异常则执行此段代码

5、无论是否检测到异常,都会执行finally代码

1)try_finally 无论是否检测到异常,都会执行finally代码,主要为异常处理事件提供清理机制,用来关闭文件或者释放系统资源。

语法:

try:

可能发⽣错误的代码

finally:

要执行此段代码

2)try-except-finally使用

1.若try语句没有捕获异常,执行完try代码段后,执行finally

2.若try捕获异常,首先执行except处理错误,然后执行finally

finally 子句放在最后,无论是否出现异常都会执行。

语法:

try:

可能发⽣错误的代码

except :

如果出现异常执⾏的代码1

finally:

要执行此段代码

3)try-except-else-finally使用

没有异常 try->else->finally

有异常 try->expect->finally

语法:

try:

可能发⽣错误的代码

except :

如果出现异常执⾏的代码

else:

# try语句中没有异常则执行此段代码

finally:

要执行此段代码

6、raise主动触发异常

可以使用raise语句自己触发异常,raise语法格式如下:

raise [Exception [, args [, traceback]]]

使用 raise 语句允许强制抛出一个指定的异常,要抛出的异常由 raise 的唯一参数标识,它必需是一个异常实例或异常类(继承自 Exception 的类)。

示例:

def not_zero(num):

try:

if num == 0:

raise ValueError('参数错误')

return num

except Exception as e:

print(e)

not_zero(0)

7、采用traceback模块查看异常

语法:

try:

可能发⽣错误的代码

except:

traceback.print_exc()

示例:

try:

1/0

except Exception as e:

print(e)

这样就会帮我们追溯到出错点:

Traceback (most recent call last):

File "E:/workspaces/python/pythondemo/test/test2/异常.py", line 16, in

1 / 0

ZeroDivisionError: division by zero

8、自定义异常

在Python中,抛出⾃定义异常的语法为 raise 异常类对象 。

示例:

# ⾃定义异常类,继承Exception

class ShortInputError(Exception):

def __init__(self, length, min_len):

self.length = length

self.min_len = min_len

# 设置抛出异常的描述信息

def __str__(self):

return f'你输⼊的⻓度是{self.length}, 不能少于{self.min_len}个字符'

def main():

try:

con = input('请输⼊密码:')

if len(con) < 3:

raise ShortInputError(len(con), 3)

except Exception as result:

print(result)

else:

print('密码已经输⼊完成')

main()

输出结果:

请输⼊密码:2

你输⼊的⻓度是1, 不能少于3个字符

9、常见异常种类

AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x

IOError 输入/输出异常;基本上是无法打开文件

ImportError 无法引入模块或包;基本上是路径问题或名称错误

IndentationError 语法错误(的子类) ;代码没有正确对齐

IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]

KeyError 试图访问字典里不存在的键

KeyboardInterrupt Ctrl+C被按下

NameError 使用一个还未被赋予对象的变量

SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)

TypeError 传入对象类型与要求的不符合

UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它

ValueError 传入一个调用者不期望的值,即使值的类型是正确的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值