Python--一言不合就try一下?

简介: Python--一言不合就try一下?

这里需要注意的是错误是Error,异常是Exception。 异常是可以被捕捉的,被处理的,但是错误是不能被捕获的。异常官方文档

我们一般情况下,习惯性的叫pycharm控制台给出的红色字体叫报错。其实不然,是异常。

异常产生: raise语句显示的抛出异常 Python解释器自己检测到的异常,并引发它

print(1/0)
"""
 print(1/0)
ZeroDivisionError: division by zero
"""
def fuc(num):
    if num == 1:
        raise Exception('错了呢')
fuc(1)
"""
    raise Exception('错了呢')
Exception: 错了呢
"""

看示例一中带有Error,实则并非正真的错误,它是由一层一层代码结构继承下来的,可以理解为继承自异常类下的Error类名。

捕获异常

try:
    print("正在捕捉")
    print(1/0)
except ZeroDivisionError:
    print("不可以除0")
"""
正在捕捉
不可以除0
"""

多个except

try:
    n = int(input('请输入一个数字:'))
    print(n)
except ValueError:
    print("输入整数啦")
except KeyError:
    print("key not found")
except FileNotFoundError:
    print("file not found")

:::danger 在try后面,可以接多个except,在异常后,会精准输出对应的异常提示。 :::

except与打印指定信息

正常情况下,except可以捕捉错误类型,且打印指定的错误信息

那么有没有一种方法可以直接访问捕捉异常呢,俗称:只想捕捉异常并直接打印对应信息。肯定有的

class Myexception(Exception):
    def __init__(self,code,message):
        self.code = code
        self.message = message
try:
    raise Myexception(code="404",message="Not")
except ValueError:
    print("输入整数啦")
except KeyError:
    print("key not found")
except FileNotFoundError:
    print("file not found")
except:
    print("我啥都捕捉")
"""
我啥都捕捉
"""

不论在何时都可以使用except。这里写的复杂例子后续还有其他内容要说。 Myexception继承自Exception,并且初始化了。这跟源码有关系。

不同层次的打印信息

正常情况下我们是直接捕捉错误并且print的。 还有另一种方式:

class Myexception(Exception):
    def __init__(self,code,message):
        self.code = code
        self.message = message
try:
    raise Myexception(code="404",message="Not")
except ValueError:
    print("输入整数啦")
except KeyError:
    print("key not found")
except FileNotFoundError:
    print("file not found")
except Exception as e:
    print(e)
    print(e.code,e.message)
    print("我就是猖狂,我全部揽下来")

那就是as e的方式,我们需要在抛出异常的时候传入初始化参数,也就是报错提示,随后捕捉的时候使用.code,.message的方式输出。这里的e,也可以是其他的东西,类似于变量。

finally

可以理解为只要写了它,不论如何都会执行先关语句。在退出try的时候总是会执行。

try:
    f  = open('test')
except ValueError as e:
    print(e.args,e.__dict__,sep='||')
except Exception as e:
    print(e.args,e.__dict__,sep='||')
finally:
    print("不论怎么样,我都会执行")
"""
(2, 'No such file or directory')||{}
不论怎么样,我都会执行
"""

可以看到即使异常了,也还是会执行的。sep的用法,请看零散小方法

else

在没有异常的时候执行这个语句

try:
    print(1//1)
except ValueError as e:
    print(e.args,e.__dict__,sep='||')
except Exception as e:
    print(e.args,e.__dict__,sep='||')
else:
    print("No Exception,action")
"""
1
No Exception,action
"""

finally和else

try:
    print(1//1)
except ValueError as e:
    print(e.args,e.__dict__,sep='||')
except Exception as e:
    print(e.args,e.__dict__,sep='||')
else:
    print("No Exception,action")
finally:
    print("Start Action , Show Time")
"""
1
No Exception,action
Start Action , Show Time
"""

这二者可以结合使用,此外你也可以在这其中加入一系列的代码,例如for循环,if判断等

小结

1、如果try中语句执行时发生异常,搜索except子句,并执行第一个匹配该异常的except子句 2、如果try中语句执行时发生异常,却没有匹配的except子句,异常将被递交到外层的try,如果外层不处理这个异常,异常将继续向外层传递。如果都不处理该异常,则会传递到最外层,如果还没有处理,就终止异常所在的线程 3、如果在try执行时没有发生异常,如有else子句,可执行else子句中的语句 4、无论try中是否发生异常,finally子句最终都会执行

目录
相关文章
|
3月前
|
数据库连接 Python
Python中的异常处理除了Try语句,你还会啥?
Python中的异常处理除了Try语句,你还会啥?
65 1
|
3月前
|
Python
|
3月前
|
Python
Python 中的 try 和 except 块
【8月更文挑战第29天】
47 6
|
5月前
|
开发者 Python
在Python中,异常处理通过`try`、`except`、`else`和`finally`关键字进行
【6月更文挑战第26天】在Python中,异常处理通过`try`、`except`、`else`和`finally`关键字进行。基本结构包括尝试执行可能抛出异常的代码,然后指定`except`来捕获特定或任何类型的异常。`else`块在`try`无异常时执行,`finally`块确保无论是否发生异常都会执行,例如用于清理。可以使用`raise`重新抛出异常,而自定义异常则允许创建特定的错误类。这种机制增强了代码的健壮性。
64 7
|
5月前
|
定位技术 Python
Python的try、except异常处理模块使用方法
所以,我们就解决了由于可能具有的arcpy.ExecuteError异常而导致的程序中断问题;大家在实际使用时,按照自己程序中可能出现的报错类,对本文出现的arcpy.ExecuteError异常类加以修改即可。
|
6月前
|
Python
python的else块(可选)在try块成功执行且没有引发异常时执行
【5月更文挑战第12天】python的else块(可选)在try块成功执行且没有引发异常时执行
62 1
|
6月前
|
Python
|
6月前
|
存储 开发者 Python
Python从入门到精通:2.2.1异常处理与文件操作——学习try/except语句进行异常处理
Python从入门到精通:2.2.1异常处理与文件操作——学习try/except语句进行异常处理
124 3
|
6月前
|
Python
python中的异常处理(try,except,else, finally)
python中的异常处理(try,except,else, finally)
76 0
下一篇
无影云桌面