Python之异常处理

什么是异常?

当程序进行中检测到一个错误时,无法继续执行,出现了一些错误的提示,这就是所谓的“异常”

一、常见代码异常

1、变量没定义:NameError
2、语法错误:SyntaxError
3、键不存在:KeyError
4、没找到模块:ModuleNotFoundError
5、类型错误:TypeError

二、异常类型介绍

在这里插入图片描述

三、异常分析

报错信息的三部分:
第一部分:最后一行展示异常类型
第二部分:错误信息
第三部分:异常追踪
寻找错误代码:从下往上寻找文件,自己写的文件中代码有问题,导致其他模块的代码出现问题。内置的模块一般是不会错的~

四、异常捕获:通过异常捕获可以提高代码的容错性

try:有可能会出现错误的代码,放在try下面

except:当try里面的代码出错了,就会执行except里面的代码(可以在此处,处理异常)

else:代码没有出现异常才会执行

finally:不管有没有异常都会执行

try:
    # 有可能会出现错误的代码,放到try下面
    num = int(input("请输入一个数值:"))
except:
    # 当try里面的代码出错了,就会执行except里面的代码(可以在此处处理异常)
    print("您输入的不是数字!,默认输入的是0")
    num = 0
else:
    # 代码不出错才会执行
    print("else:try里面的代码没有出错")
    a = num / 2
    print(a)
finally:
    # 不管出不出错都会执行
    print("------finally-------------")
print("程序的其他代码")

运行结果1(输入错误):
请输入一个数值:kkk
您输入的不是数字!,默认输入的是0
------finally-------------
程序的其他代码
运行结果2(输入符合):
请输入一个数值:88
else:try里面的代码没有出错
44.0
------finally-------------
程序的其他代码

五、异常处理

一、try——except

1.try里面的代码(不可控因素造成的错误需要使用try来异常捕获):

1)涉及用户输入(用户输入的内容不是数字)
2)涉及到文件操作(文件不存在、路径不存在)
3)涉及到网络请求(请求接口时,网络不好)
注意:语法错误try捕获不了

2.捕获指定的异常类型,不同的异常类型做不同的处理

try:
    num = int(input("请输入一个数值:"))
    print(a)

except ValueError:
    print("捕获到了ValueError")
except NameError:
    print("捕获到了NameError")

运行结果1:
请输入一个数值:100
捕获到了NameError
运行结果2:
请输入一个数值:啊啊啊
捕获到了ValueError

try:
    num = int(input("请输入一个数值:"))
    print(a)

# 想看异常信息可以通过e变量来看,变量名可以随便的
except ValueError as e:
    print("捕获到了ValueError:{}".format(e))
except NameError as e:
    print("捕获到了NameError:{}".format(e))

运行结果1:
请输入一个数值:啊啊啊
捕获到了ValueError:invalid literal for int() with base 10: ‘啊啊啊’
运行结果2:
请输入一个数值:111
捕获到了NameError:name ‘a’ is not defined

3.所有的异常类型,做相同的处理

try:
    num = int(input("请输入一个数值:"))
    print(a)
# 捕获所有异常类型,缺点没有办法获取异常信息
except :
    print("捕获到了异常")
try:
    num = int(input("请输入一个数值:"))
    print(a)
except Exception as e:
    print("捕获到了异常:{}".format(e))

运作结果1:
请输入一个数值:33
捕获到了异常:name ‘a’ is not defined
运行结果2:
请输入一个数值:aa
捕获到了异常:invalid literal for int() with base 10: ‘aa’

不建议捕获所有异常类型,能确定异常类型就指定异常类型。不方便做针对性的处理。

4.一个except捕获指定的多个异常类型:用元组的形式写

try:
    num = int(input("请输入一个数值:"))
    print(a)
# 捕获多个异常类型,不同的异常类型做统一的处理
except (ValueError,NameError) as e:
    print("捕获到了异常:{}".format(e))

运行结果1:
请输入一个数值:222
捕获到了异常:name ‘a’ is not defined
运行结果2:
请输入一个数值:aa
捕获到了异常:invalid literal for int() with base 10: ‘aa’

5.Exception捕获所有异常类型

try:
    num = int(input("请输入一个数值:"))
    print(a)
except Exception as e:
    print("捕获到了异常:{}".format(e))

运作结果1:
请输入一个数值:33
捕获到了异常:name ‘a’ is not defined
运行结果2:
请输入一个数值:aa
捕获到了异常:invalid literal for int() with base 10: ‘aa’
补充:

BaseException 也可以捕获所有异常类型,可以理解为所有异常的祖宗,详见第二点异常类型介绍

try:
    num = int(input("请输入一个数值:"))
    print(a)
except BaseException as e:
    print("捕获到了异常:{}".format(e))

二、try——except——else

1.try中的内容报错了,不执行else

# name = 111
try:
    print(name)
except Exception as e:
    print("代码报错了")
    print(e)
else:
    print("try里面的代码没有出错")

运行结果:代码报错了
name ‘name’ is not defined

2.try中的内容没报错,执行else

name = 111
try:
    print(name)
except Exception as e:
    print("代码报错了")
    print(e)
else:
    print("try里面的代码没有出错")

运行结果:111
try里面的代码没有出错

三、try——except——else——finally

1、代码报错,会执行finally

name = 111

try:
    a = 100 / 5
    print(name)
    f = open("111.py", 'w')
    f.write([111, 33, 444])
except NameError as e:
    print("代码报错了")
    print(e)
else:
    # 代码不出错才会执行
    print("else:try里面的代码没有出错")
finally:
    # 不管出不出错都会执行
    print("------finally-------------")
    f.close()
print("888888888888888888888888")

运行结果:111
------finally-------------
TypeError: write() argument must be str, not list

2、代码不报错,会执行finally

name = 111

try:
    a = 100 / 5
    print(name)
    f = open("111.py", 'w')
    f.write([111, 33, 444])
except Exception as e:
    print("代码报错了")
    print(e)
else:
    # 代码不出错才会执行
    print("else:try里面的代码没有出错")
finally:
    # 不管出不出错都会执行
    print("------finally-------------")
    f.close()
print("888888888888888888888888")

运行结果:111
代码报错了
write() argument must be str, not list
------finally-------------
888888888888888888888888

3、实际应用:open打开文件,代码报错后,没有捕获到,没有close,这时可以在finally中关掉

数据库也是如此,操作数据库报错后,也可以关闭数据库连接

try:
    f = open("111.py", 'w')
    f.write([111, 33, 444])
except NameError as e:
    print("代码报错了")
    print(e)
else:
    # 代码不出错才会执行
    print("else:try里面的代码没有出错")
finally:
    # 不管出不出错都会执行
    print("------finally-------------")
    f.close()
print("888888888888888888888888")

六、断言(assert )

什么是断言?
assert 后面跟一个条件语句,如果条件不成立就会触发断言异常

res='666'
expected='888'
assert res==expected

在这里插入图片描述

res='666'
expected='888'
try:
    assert res == expected
except AssertionError as e:
    print("用例不通过")
else:
    print("用例通过")

运行结果:
用例不通过

res='888'
expected='888'
try:
    assert res == expected
except AssertionError as e:
    print("用例不通过")
else:
    print("用例通过")

运行结果:
用例通过

七、主动引发一个异常(raise)

res='8889'
expected='888'
try:
    assert res == expected
except AssertionError as e:
    print("用例不通过")
    raise e

执行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我知道你的问题了。那么关于 Python异常处理 try/except 语句和判断整数的问题,我可以为您解答。 在 Python 中,异常处理是一种非常重要的编程技巧,可以帮助我们在程序出现错误时做出相应的处理,避免程序崩溃或出现不可预料的结果。其中,try/except 语句是 Python 中用来捕获异常的一种关键字,其基本语法如下: ``` try: # 可能出现异常的代码块 except 异常类型1: # 处理异常类型1的代码块 except 异常类型2: # 处理异常类型2的代码块 ... else: # 没有异常发生时执行的代码块 finally: # 无论是否有异常执行的代码块 ``` 在这里,我们可以使用 try/except 语句来判断一个字符串是否能够转换为整数。例如: ``` try: num = int(input("请输入一个整数:")) print("输入的整数是:", num) except ValueError: print("输入的不是整数!") ``` 在这个例子中,我们使用 int() 函数将用户输入的字符串转换为整数。如果用户输入的是一个非数字字符串,那么就抛出 ValueError 异常,我们就可以在 except 块中进行相应的处理。 至于判断一个字符串是否能够转换为整数,我们可以使用 Python 中的 isdigit() 方法,将其与 try/except 语句结合使用。例如: ``` num_str = input("请输入一个数字字符串:") if num_str.isdigit(): num = int(num_str) print("转换后的整数是:", num) else: print("输入的不是数字字符串!") ``` 在这个例子中,我们首先使用 isdigit() 方法判断用户输入的字符串是否都是数字字符,如果是,就可以使用 int() 函数将其转换为整数;否则,就输出相应的提示信息。 希望这些解答能够对您有所帮助,如有疑问请随时追问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值