python3 try_except_else_finally_assert_raise.py

"""
模块:python3 try_except_else_finally_assert_raise.py
功能:python3 错误和异常。
参考:https://www.runoob.com/python3/python3-errors-execptions.html
知识点:
1.try-except-else-finally
其中,except, else,finally为可选子句。
except,用于捕获异常并处理。
else字句,在没有异常时,会执行。
finally,不管有没有异常都会执行,
如果有异常未被捕获,会先执行finally子句,再抛出异常。

2.一个except子句可以同时处理多个异常,
这些异常将被放在一个括号里成为一个元组,例如:
except (RuntimeError, TypeError, NameError):
        pass
"""
import sys

# # 1.
# while True:
#     try:
#         x = int(input("输入一个数字: "))
#         break
#     except ValueError:
#         print("无效数字,请重试!")

# # 2.命令:python cs.py cs3.txt
# print("sys.argv:", sys.argv)
# # sys.argv: ['cs.py', 'cs3.txt']
# for arg in sys.argv[1:]:
#     try:
#         f = open(arg, 'r')
#     except IOError:
#         print('cannot open', arg)
#     else:
#         print(arg, 'has', len(f.readlines()), 'lines')
#         f.close()
# # try except 语句还有一个可选的 else 子句,
# # 如果使用这个子句,那么必须放在所有的 except 子句之后。
# # 这个子句将在 try 子句没有发生任何异常的时候执行。

# # 3.异常处理并不仅仅处理那些直接发生在try子句中的异常,
# # 而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。
# def this_fails():
#     x = 1 / 0
#
#
# try:
#     this_fails()
# except ZeroDivisionError as err:
#     print('error:', err)
#     # error: division by zero

# # 4.raise 唯一的一个参数指定了要被抛出的异常。
# # 它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
# # 如果你只想知道这是否抛出了一个异常,并不想去处理它,
# # 那么一个简单的 raise 语句就可以再次把它抛出。
# try:
#     raise NameError('HiThere')
# except NameError:
#     print('一个异常!')
#     raise
# # NameError: HiThere

# # 5.不管 try 子句里面有没有发生异常,finally 子句都会执行。
# # 如果一个异常在 try 子句里(或者在 except 和 else 子句里)被抛出,
# # 而又没有任何的 except 把它截住,
# # 那么这个异常会在 finally 子句执行后,被抛出。
# def divide(x, y):
#     try:
#         result = x / y
#     except ZeroDivisionError:
#         print("除以零!")
#     else:
#         print("结果:", result)
#     finally:
#         print("执行最后子句。")
#
#
# divide(2, 1)
# # 结果: 2.0
# # 执行最后子句。
# divide(2, 0)
# # 除以零!
# # 执行最后子句。
# divide("2", "1")
# # 执行最后子句。
# # TypeError: unsupported operand type(s) for /: 'str' and 'str'

# # 6.
# try:
#     raise KeyboardInterrupt
# finally:
#     print('Goodbye, world!')
# # Goodbye, world!
# # KeyboardInterrupt

# # 7.最后一个except子句可以忽略异常的名称,它将被当作通配符使用。
# # 你可以使用这种方法打印一个错误信息,然后再次把异常抛出。
# try:
#     f = open('cs.txt')
#     s = f.readline()
#     i = int(s.strip())
# except OSError as err:
#     print("OS error: {0}".format(err))
#     # OS error: [Errno 2] No such file or directory: 'myfile.txt'
# except ValueError:
#     print("无法将数据转换为整数。")
#     # 无法将数据转换为整数。
#     raise
# except:
#     print("Unexpected error:", sys.exc_info()[0])
#     raise

# # 8.预定义的清理行为
# # 一些对象定义了标准的清理行为,无论系统是否成功的使用了它,
# # 一旦不需要它了,那么这个标准的清理行为就会执行。
# # 关键词 with 语句就可以保证诸如文件之类的对象在使用完之后一定会正确的执行他的清理方法:
# # 就算在处理过程中出问题了,文件 f 总是会关闭的。
# with open("cs.txt", encoding="utf-8") as f:
#     print("f:", f)
#     # f: <_io.TextIOWrapper name='cs.txt' mode='r' encoding='utf-8'>
#     for line in f:
#         # 使用文件本身的换行。
#         print(line, end="")


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值