异常处理及其相关知识点

写代码的时候,对于那些不确定会报什么错误或者说感觉可能会报错的地方,才会用到异常处理。但是切记,一般情况下不要用,毕竟这玩意影响代码的可读性,毕竟是你写代码的时候附加的逻辑。

正本清源
很多人以为只有try .. except这种代码逻辑才是异常处理,我只能说大傻逼,懂个锤子。
难道if .. elif .. else这种形式就不是异常处理了???啊?回答我。

言归正传,其实if和except两种方式都可以,只不过建议用except,因为更简洁。

直接上代码:
try:
    num=input('请输入一个数字:')
    int(num)
except ValueError as e:
    print(e)
输出:
D:\python_s3\pythonProject\pythonProject\.venv\Scripts\python.exe D:\python_s3\pythonProject\pythonProject\day29\test.py 
请输入一个数字:dlja
invalid literal for int() with base 10: 'dlja'

Process finished with exit code 0

上面的代码还可以改成多分支的情况:

try:
    num=input('请输入一个数字:')
    int(num) #主函数
except ValueError as e:
    print(e)
except KeyError as e:
    print(e)
#下面这条是万能语句,意思是上面那两个except都对应不上,直接找Exception。也可以直接用Exception
except Exception as e:
    print(e)
#下面的else和if..else中的else完全是两个概念,这里的else是指当try中的内容没有报错时执行else的内容。
else:
    print('当主函数没有报错时执行')
finally:
    print('不管主函数有没有报错,这条语句都会执行')

其实异常处理的内容一般情况下也不使用,会用就行了。
接下来,再教给你们一个高端玩法,自定义一个异常,看好了。

class MyExcept(BaseException):
    def __init__(self,msg):
        self.msg=msg

raise MyExcept('自制的异常类型')
输出结果:
Traceback (most recent call last):
  File "D:\python_s3\pythonProject\pythonProject\day29\test.py", line 5, in <module>
    raise MyExcept('自制的异常类型')
__main__.MyExcept: 自制的异常类型

下面介绍几个常用的异常类型:

AttributeError:试图访问一个对象没有的属性,比如foo.x,但是foo没有x属性时报此错误。
IOError:输入/输出异常,基本上是无法打开文件。
ImportError:无法引入模块或包,基本上是路径问题或者名称错误。
IndentationError:语法错误,一般是代码没有正确对齐。
IndexError:下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError:试图访问字典里不存在的键
KeyboardInterrupt:按到了Ctrl+c键
NameError:使用一个还未被赋予对象的变量
SyntaxError:python代码非法,代码不能编译(一般是语法错误,代码写错了)
TypeError:传入对象类型与要求的不符合
UnboundLocalError:试图访问一个还未被设置的局部变量
ValueError:传入一个调用者不想要的值,即使值的类型是正确的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值