Python3快速入门—10.知识扩展

这篇博客介绍了Python3中的异常处理,包括常见异常类型、异常处理结构以及如何自定义异常。此外,还讨论了文件I/O操作、None的特性和类的专有方法。最后,讲解了如何使用函数注释、代替switch case语句的技巧,以及推导式的应用,如列表、集合和字典推导式。
摘要由CSDN通过智能技术生成

10.Python3扩展

10.1异常

10.1.1常见异常

程序在运行时产生的错误称为异常。

在官网https://docs.python.org/3/library/exceptions.html中,对Python3中所有的内置异常进行了详细说明。其具体的层次结构如下:

BaseException(所有异常的基类)

 +-- SystemExit(由sys.exit()引发,表示解释器请求退出)

 +-- KeyboardInterrupt(用户中断程序的执行,在windows中输入Ctrl+c)

 +-- GeneratorExit

 +-- Exception(常规错误的异常)

      +-- StopIteration(当迭代器的next()方法不指向任何对象时引发)

      +-- StopAsyncIteration

      +-- ArithmeticError(所有数值计算错误的基类)

      |    +-- FloatingPointError(浮点运算错误时引发)

      |    +-- OverflowError(当数值运算超出最高限制时引发)

      |    +-- ZeroDivisionError(当除运算/取模运算时,分母为0时引发)

      +-- AssertionError

      +-- AttributeError(对象属性引用失败或赋值失败时引发)

      +-- BufferError

      +-- EOFError(当input()函数在不读取任何数据的情况下到达文件结尾(eof)时引发)

      +-- ImportError(当import语句在尝试加载模块遇到问题时引发,如模块未找到)

      |    +-- ModuleNotFoundError

      +-- LookupError(在映射(字典)或序列中,使用键(key)或下标索引无效时引发)

      |    +-- IndexError(序列下标超出范围时引发)

      |    +-- KeyError(在映射(字典)中,使用key找不到对应的value)

      +-- MemoryError

      +-- NameError(在找不到局部/全局变量时引发)

      |    +-- UnboundLocalError

      +-- OSError(当系统函数返回与系统相关的错误,如”文件未找到”等I/O错误时引发)

      |    +-- BlockingIOError

      |    +-- ChildProcessError

      |    +-- ConnectionError

      |    |    +-- BrokenPipeError

      |    |    +-- ConnectionAbortedError

      |    |    +-- ConnectionRefusedError

      |    |    +-- ConnectionResetError

      |    +-- FileExistsError

      |    +-- FileNotFoundError

      |    +-- InterruptedError

      |    +-- IsADirectoryError

      |    +-- NotADirectoryError

      |    +-- PermissionError

      |    +-- ProcessLookupError

      |    +-- TimeoutError

      +-- ReferenceError(weakref.proxy()创建的弱引用对象被回收后,仍被访问/引用时引发)

      +-- RuntimeError(当生成的错误不属于其他任何类别时引发)

      |    +-- NotImplementedError

      |    +-- RecursionError

      +-- SyntaxError(当在Python发生语法错误时引发,如未缩进、标点符号为中文符号等)

      |    +-- IndentationError

      |         +-- TabError

      +-- SystemError

      +-- TypeError(当函数/运算操作在使用不适当数据类型时引发)

      +-- ValueError(当传入无效参数时引发)

      |    +-- UnicodeError

      |         +-- UnicodeDecodeError

      |         +-- UnicodeEncodeError

      |         +-- UnicodeTranslateError

      +-- Warning(警告类别的基类)

           +-- DeprecationWarning

           +-- PendingDeprecationWarning

           +-- RuntimeWarning

           +-- SyntaxWarning

           +-- UserWarning

           +-- FutureWarning

           +-- ImportWarning

           +-- UnicodeWarning

           +-- BytesWarning

           +-- ResourceWarning

10.1.2异常处理

#程序10-1

num = input('please input a number: ')

 

try:

    a = int(num)

    print('this number is %d'%a)

except ValueError:

    print('it is not a number!')

运行结果:

please input a number: 12

this number is 12

程序10-1中,使用try/except关键字。程序会去执行try代码块中的语句,若发生异常则执行except语句,若未发生异常则不执行except语句。

在except中可以捕获发生的异常,若异常类型匹配,则执行此excpet语句。

#程序10-2

num = input('please input a number: ')

 

try:

    a = int(num)

    print('this number is %d'%a)

except ValueError as err:

print('ValueError:%s'%err)

运行结果:

please input a number: a

ValueError:invalid literal for int() with base 10: 'a'

在程序10-2种,在except后使用关键字as可以得到异常的打印信息。

#程序10-3

try:

    a = int(num)

    print('this number is %d'%a)

except ValueError as err:

    print('ValueError:%s'%err)

except (NameError,TypeError):

    print('Identification not found in global or local namespaces!')

运行结果:

Identification not found in global or local namespaces!

在程序10-3中,在except后可以使用元组,表示捕捉多个异常。

#程序10-4

try:

    a = int(num)

    print('this number is %d'%a)

except ValueError as err:

    print('ValueError:%s'%err)

except:

    print('it is other exception!')

运行结果:

it is other exception!

在程序10-4中,在except后不加任何异常类型,则表示捕捉其他任何异常。

#程序10-5

num = input('please input a number: ')

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值