• Python 错误和异常


    常见错误

    NameError--使用未定义的变量

    SyntaxError--语法错误,常见程序格式不对。如if a后没有:

    IOError--打开一个不存在的文件或文件

    ZeroDivisionError--除零错误,即分母为零

    ValueError--传入值无效,强制类型转换时产生。如a=int('dd')

    KeyboardInterrupt--键盘中断错误,强制终止程序时产生。

    错误

    语法错误:代码不符合解释器或者编译器语法

    逻辑错误:不完整或者不合法输入或者计算出现问题

    异常

    程序遇到逻辑或者算法问题

    运行过程中计算机错误(内存不够或IO错误)

    如果没有手动对异常进行处理,那么该异常就会被解释器捕获并处理,处理的方法为忽略或终止程序

    区别

    错误是非正常的,是根本不应该出现的,比如缩进字符

    异常是一种程序运行条件,而非严重错误,比如用户输入过大

    异常处理

    try/except

    异常捕捉可以使用 try/except 语句。

     实例:

    while True: try:
            x = int(input("请输入一个数字: "))
            break
        except ValueError:
            print("您输入的不是数字,请再次尝试输入!")

    #让用户输入一个合法的整数,但是允许用户中断这个程序(使用 Control-C 或者操作系统提供的方法)。用户中断的信息会引发一个 KeyboardInterrupt 异常。

    try/except...else

    try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。

    else 子句将在 try 子句没有发生任何异常的时候执行。

     实例:

    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 语句中判断文件是否可以打开,如果打开文件时正常的没有发生异常则执行 else 部分的语句,读取文件内容

    try-finally 语句

    try-finally 语句无论是否发生异常都将执行最后的代码。

    实例:

    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('这句话,无论异常是否发生都会执行。')

    #finally 语句无论异常是否发生都会执行:

    抛出异常

    Python 使用 raise 语句抛出一个指定的异常。

    实例:

    x = 10
    if x > 5:
        raise Exception('x 不能大于 5。x 的值为: {}'.format(x))

    #如果 x 大于 5 就触发异常:

    用户自定义异常

    你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承,

    实例:

    class MyError(Exception): def __init__(self, value):
                self.value = value
            def __str__(self):
                return repr(self.value)

    try:
            raise MyError(2*2)
        except MyError as e:
            print('My exception occurred, value:', e.value)

    raise MyError('oops!')

    输出结果:

    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
    __main__.MyError: 'oops!'

     

     

     

     

     

  • 相关阅读:
    http返回码
    JAVA获取当前系统时间System.currentTimeMillis()以及获取运行时间
    【Jsoup】Jsoup解析Html标签(Java后台解析)
    字节、字、位、比特,这四者之间的关系
    Java中字符编码和字符串所占字节数 .
    判断一个字符串是否为全英文的工具
    汉语转拼音(全转与只转首个字母)工具类
    Page的生命周期及相关事件苛
    PHP设计模式——策略模式
    java生产者消费者问题代码分析
  • 原文地址:https://www.cnblogs.com/HyzH/p/12059142.html
Copyright © 2020-2023  润新知