我的wps2019没有自定义动画窗格,怎么点都没有反应,右侧出不来。重装没用,请问怎么解决?
858
2022-05-29
在Python运行遇到异常时,程序会终止;而在我们编程过程中,错误是不可避免的,这时我们需要捕捉到异常,还需要程序继续运行;这时我们就需要根据异常Traceback到出错点,进行分析改正;
1. 异常捕获
当发生异常时,我们就需要对异常进行捕获,然后进行相应的处理。python的异常捕获常用try…except…结构,把可能发生错误的语句放在try模块里,用except来处理异常,每一个try,都必须至少对应一个except。
1.1 捕获所有异常
捕获所有异常的语句如下:
# 捕获所有异常try: <语句> # 需要被判断的语言块except: <异常处理语句> # 出现异常后的处理语句12345
例子:
import systry: sys.exit()except: print('异常被捕捉到啦~~')# 输出:# '异常被捕捉到啦~~'12345678
以上语句中,由于没有指定异常,所有的异常都将被捕捉,甚至包括键盘中断和程序退出请求;(try后的语句中如果使用sys.exit(),无法退出python程序,因为sys.exit()作为异常被捕获了;)
try: <语句> except Exception: <异常处理语句> # 出现异常后的处理语句1234
例子:
import systry: sys.exit()except Exception: print('异常被捕捉到啦~~')# 程序退出了,说明没有捕捉到异常;1234567
在except后增加Exception,可以捕捉全部异常,但是不会捕捉键盘中断和程序退出请求;
1.2 捕捉指定异常
捕捉指定异常,只需要在except后增加异常的名称即可;这里的异常名称可以使用报错的异常名称;
# 捕捉指定异常try: <语句>except <异常名>: <异常处理语句> # 出现异常后的处理语句12345
1.3 捕捉多个异常
把需要捕捉的异常名称全部列在except后,这时异常没有优先级,全部捕捉;
# 捕捉多个异常,不区分优先级try: <语句>except (<异常名1>, <异常名2>, ...): <异常处理语句> # 出现异常后的处理语句12345
如果需要区分异常的优先级,则将except按照优先级分开处理,举例如下:
# 捕捉多个异常,区分优先级try: <语句>except <异常名1>: print('异常说明1') except <异常名2>: print('异常说明2') except <异常名3>: print('异常说明3')123456789101112
处理顺序:当异常发生时,先执行异常名1的语句,如果匹配则执行:print(‘异常说明1’),若不匹配,则执行异常名2,以此类推;
备注:1. 这种方式可以支持的except语句的数量没有限制; 2. 如果都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。
1.4 异常中的else
当try语句中没有某些异常时,我们可以添加else语句,来执行其他语句;即:若有异常发生则执行异常处理语句,若无异常发生,则执行else语句;
# 异常中的elsetry: <语句>except <异常名1>: <异常处理语句> # 有异常发生时,执行该语句 else: <语句> # 无异常发生时,则执行该语句123456789
1.5 异常中的finally
有些时候,无论try语句中是否有异常,我们都希望执行一些语句,这时候需要使用finally语句;即:无论异常是否发生,都会执行finally语句;
# 异常中的finally语句try: <语句> finally: <语句>123456
2. 用户自定义异常_raise 主动触发异常
在python编程中,我们可以主动触发异常,即:我们可以规定何种情况下生成何种异常;
def not_zero(num): try: if num == 0: raise ValueError('参数为0,参数错误') return num except Exception as e: print('错误类型为:',e.__class__.__name__) print('错误详情为:',e)not_zero(0)1234567891011
输出:
错误类型为: ValueError 错误详情为: 参数为0,参数错误12
3. 查看异常位置_traceback模块
有时我们需要打印出发生异常的位置,就需要使用traceback模块;举例如下:
import tracebacktry: 1/0except Exception as e: print(e) print('---------------------') traceback.print_exc() print('---------------------') a = traceback.format_exc() print(a) print('---------------------')1234567891011
输出:
# print(e)的输出结果division by zero------------------------------------------# print(a) 的输出结果Traceback (most recent call last): File "D:/PY_useful/3_python 基础/11.异常处理.py", line 21, in
4. 常见异常名 & 描述
Python
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。