python 异常

异常

# 异常处理
"""
Python 有两种错误很容易辨认:语法错误和异常
try/except
try/except...else
try-finally
raise [Exception [, args [, traceback]]]
"""

# try/except   异常捕捉
# 一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行
# 一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组
"""
except (RuntimeError, TypeError, NameError):
    pass
    
try:
    # 尝试执行的代码
    pass
except 错误类型1:
    # 针对错误类型1,对应的代码处理
    pass
except (错误类型2, 错误类型3):
    # 针对错误类型2 和 3,对应的代码处理
    pass
except Exception as result:
    print("未知错误 %s" % result)
"""
try:
    x = int(input("请输入一个数字: "))
except ValueError:
    print("您输入的不是数字,请再次尝试输入!")

# 捕获未知错误
"""
except Exception as result:
    print("未知错误 %s" % result)
"""

# try/except...else   使用这个子句,那么必须放在所有的 except 子句之后
# else 子句将在 try 子句没有发生任何异常的时候执行
# 使用 else 子句比把所有的语句都放在 try 子句里面要好,这样可以避免一些意想不到,而 except 又无法捕获的异常
try:
    f = open(‘arg‘, ‘r‘)
except IOError:
    print(‘cannot open‘, ‘arg‘)
else:
    print(‘arg‘, ‘has‘, len(f.readlines()), ‘lines‘)
    f.close()

# try-finally 语句  无论是否发生异常都将执行最后的代码
def runoob():
    pass
try:
    runoob()
except AssertionError as error:
    print(error)
else:
    try:
        with open(‘file.log‘) as file:
            read_data = file.read()
    except FileNotFoundError as fnf_error:
        print(fnf_error)
finally:
    print(‘这句话,无论异常是否发生都会执行。‘)

# 抛出异常  raise [Exception [, args [, traceback]]]
# raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)
x = 10
if x > 5:
    raise Exception(‘x 不能大于 5。x 的值为: {}‘.format(x))

# 用户自定义异常
# 你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承
class MyError(Exception):
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return repr(self.value)

# with 关键词 with 语句就可以保证诸如文件之类的对象在使用完之后一定会正确的执行他的清理
# 文件 f 总是会关闭
with open("myfile.txt") as f:
    for line in f:
        print(line, end="")

# 异常的传递
"""
在开发中,可以在主函数中增加 异常捕获
而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的 异常捕获 中
这样就不需要在代码中,增加大量的 异常捕获,能够保证代码的整洁
"""

相关推荐