Python复习 Day7 异常的处理

一、处理异常

1.1 常见异常

ValueError传入的值错误
IndexError索引超出序列范围
AttributeError对象不存在访问对象的属性和方法时
TypeError输入的值类型不合适
NameError访问一个没有声明的变量
KeyError请求一个不存在的字典key
IOError输入输出错误(比如要读取的值不存在)
ImportErrorimport无法找到模块或相应的变量函数名称时

1.2 异常处理语句

1.2.1 try...except

1.2.1.1 语法:

try:

        可能出现异常的代码块

except [异常名称] [as alias]:

        出现异常时输出的代码块

① 异常名称是可选参数,如果不指定异常名称时,将捕捉所有异常;

② 同一个except语句可以指定多个异常,多个异常用小括号括起来,通过逗号分隔开;

③ try后也可以跟多个except语句

④ as alias是可选参数,可以为异常指定别名;

⑤ 出现异常时抛出的信息,可以为固定的提示语,也可以通过别名输出异常信息

s = '春眠'
try:
    t = int(s)
    print(t)
except ValueError as a:
    print('出错了', a)
except NameError as b:
    print('出错了', b)
# 出错了 invalid literal for int() with base 10: '春眠'
# 只捕捉到了ValueError,未捕捉到NameError
1.2.1.2 else和finally

try:

        可能出现异常的代码块

except [异常名称] [as alias]:

        出现异常时输出的代码块

else:

        未出现异常时输出的代码块

finally:

        无论是否出现异常都输出的代码块

① else跟在所有的except后,用于指定无异常抛出时的信息,比如:“xxx顺利进行”

② finally跟在所有语句后,用于指定任何情形下都执行的代码,即使发生异常,也会被执行。

③ finally常用于一些清理工作,比如,关闭文件,释放资源等。

s = '12345'
try:
    t = int(s)
    print(t)
except ValueError as a:
    print('出错了', a)
else:
    print('str转化int顺利执行')
finally:
    print('执行了一次转化字符串的操作')

# 12345
# str转化int顺利执行
# 执行了一次转化字符串的操作

1.2.2 raise

1.2.2.1 语法

raise [异常名称([异常信息])]

① 异常名称是可选参数,如果不选择,只能用于except语句中,原样抛出异常

② 异常信息也是可选参数,如果不选择,只会抛出异常名称

1.2.2.2 异常处理顺序

① raise捕捉异常,而后直接跳转异常处理语句

② 跳转except异常处理语句

③ except处理完后,直接执行后续代码,不会跳转回抛出异常的位置,

④ 所以,raise和except之间的语句没机会被执行

try:
    s = '春眠'
    if s == '春眠':
        raise ValueError('文字字符串不能转化为数字')    # ①捕捉异常,而后直接跳转异常处理语句
    print('这条语句无法执行')    # ⑤所以这条语句将不被执行
except ValueError as a:    # ②异常处理语句
    print('出错了', a)    # ③处理异常,处理完后直接执行后续代码,不会跳转回抛出异常的位置,
print('执行了一次转化字符串的操作')    # ④异常处理完后直接从这里执行
1.2.2.3 raise的不同使用情况

① 异常名称、异常原因全部使用:

抛出指定的异常信息。如:"文字不能转化为数字"

try:
    s = '春眠'
    if s == '春眠':
        raise ValueError('文字不能转化为数字')
except ValueError as a:
    print('出错了', a)
print('执行了一次转化字符串的操作') 
"""
出错了 文字不能转化为数字
执行了一次转化字符串的操作
"""

② 只使用异常名称,省略异常信息:

只抛出异常名称,无异常信息

try:
    s = '春眠'
    if s == '春眠':
        raise ValueError    
except ValueError as a:  
    print('出错了', a)    
print('执行了一次转化字符串的操作') 
"""
出错了 
执行了一次转化字符串的操作
"""

③ 只使用raise :

仅能用于except语句中,用于except捕获异常后,重新抛出这个异常。

如果后面没有再一个except语句重新捕获,后续的语句将无法执行。如:

try:
    a = 10/0
except ZeroDivisionError as e:
    print('出错了')
    raise
print('这条语句无法执行')
"""
出错了
Traceback (most recent call last):
  File "D:\PyCharm Community Edition 2023.2.1\plugins\python-ce\helpers\pydev\pydevconsole.py", line 364, in runcode
    coro = func()
           ^^^^^^
  File "<input>", line 2, in <module>
ZeroDivisionError: division by zero
"""

1.3 程序调试

1.3.1 Pycharm的debug(摘自百度AI知道)

PyCharm的Debug功能非常强大,可以帮助开发者在代码运行过程中暂停、单步执行、查看变量值等,以便找出并解决问题。PyCharm的Debug功能的基本步骤:

  1. 设置断点:在需要暂停代码执行的位置,点击代码行号旁边的空白处,会出现一个红点,表示在该位置设置了一个断点123。断点可以设置在需要观察的代码行,例如循环、条件判断、函数调用等位置。
  2. 启动Debug模式:有几种方法可以启动Debug模式:
    • 点击代码编辑器左侧边栏的绿色虫子图标2。
    • 在需要Debug的文件上右键,选择“Debug”选项2。
    • 在代码编辑界面的空白处右键,选择“Debug”2。
    • 使用快捷键,例如Shift+F91。
  3. Debug界面与操作
    • 控制区域:Debug界面通常包含控制代码执行走向的区域。其中,常见的操作有:
      • **Step Over (F8)**:执行当前行并跳到下一行,如果下一行是函数调用,则不会进入函数内部3。
      • **Step Into (F7)**:执行当前行并进入任何函数调用3。
      • **Step Out (Shift+F8)**:当在函数内部时,执行此操作将跳出当前函数,并返回上一层函数的执行点3。
      • Run to Cursor:直接运行到光标所在的位置3。
    • 变量查看器:在Debug界面的某一部分,你可以查看当前所有可用的变量及其值3。
    • Console窗口:这个窗口可以用来执行额外的代码或查看程序给出的错误信息3。
  4. Debug交互:在Debug暂停时,你可以在Console窗口中进行交互,例如计算变量的值、调用方法等1。
  5. 断点属性:你可以通过右键点击断点来查看和更改断点的属性,例如条件断点等3。
  6. 结束Debug:当你完成Debug并希望继续正常执行程序时,可以点击“Stop”按钮或关闭Debug窗口来结束Debug模式。

图示:

1.3.2 assert语句

assert:断言;一般用于对程序在某个时刻必须满足的条件进行验证

语法格式:

assert expression[,reason]

expression: 表达式,对表达式做出判断,如果为True什么都不做,如果为False,抛出异常,异常类型AssertionError

reason: 可选参数,描述AssertionError,注意逗号

assert语句可以和异常处理语句结合起来用,如:

def main():
    a = 10
    b = 0
    assert b != 0, '除数不能为0'
    print(a/b)

try:
    main()
except AssertionError as e:
    print('出错了,',e)    # 出错了, 除数不能为0

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值