异常处理的python

news/2024/7/4 10:00:36

Python异常

Python3的捕获异常语法

try:
    # 未声明的变量
    print(x)
except Exception as e:
    print(e)

Python常见异常和错误

  1. NameError:尝试访问一个未申明的变量
print(v)
NameError: name 'v' is not defined
  1. ZeroDivisionError:除数为0
print(1/0)
ZeroDivisionError: int division or modulo by zero
  1. SyntaxError:语法错误
print(,)
File "test.py", line 201
    print(,)
          ^
SyntaxError: invalid syntax
  1. IndexError:索引超出范围
List = [2]
print(List[3])
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    List[3]
IndexError: list index out of range
  1. KeyError:字典关键字不存在
Dic = {'1':'yes', '2':'no'}
print(Dic['3'])
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    Dic['3']
KeyError: '3'
  1. IOError:输入输出错误
f = open('abc')
IOError: [Errno 2] No such file or directory: 'abc'
  1. AttributeError:访问未知对象属性
class Worker:
    def Work():
        print("I am working")

w = Worker()
w.a
Traceback (most recent call last):
  File "<pyshell#51>", line 1, in <module>
    w.a
AttributeError: 'Worker' object has no attribute 'a'
  1. ValueError:数值错误
int('d')
Traceback (most recent call last):
  File "<pyshell#54>", line 1, in <module>
    int('d')
ValueError: invalid literal for int() with base 10: 'd'
  1. TypeError:类型错误
iStr = '22'
iVal = 22
obj = iStr + iVal;
Traceback (most recent call last):
  File "<pyshell#68>", line 1, in <module>
    obj = iStr + iVal;
TypeError: Can't convert 'int' object to str implicitly

Python异常处理基本原则

(1)执行try子句(在关键字try和关键字except之间的语句)

(2)如果没有异常发生,忽略except子句,try子句执行后结束。

(3)如果在执行try子句的过程中发生了异常,那么try子句剩下的部分将被忽略。如果异常的类型和except之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。

try:
    print(x)
# 产生的异常类型和捕获的异常类型相符
except NameError as e:
    print(1)
    print(e)

(4)如果异常没有与任何except匹配,那么这个异常将会传递给上层的try中。

try:
    try:
        print(x)
    # 产生的异常和捕获异常的类型不符,则异常传递给上层try
    except IndexError as e:
        print(1)
        print(e)
except Exception as ee:
    print(2)
    print(ee)

(5)一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

try:
    print(x)
except IndexError as e1:
    print(1)
    print(e1)
except NameError as e2:
    print(2)
    print(e2)

(6)一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。

try:
    print(x)
except (IndexError, NameError) as e:
    print(e)

(7)最后一个except子句可以忽略异常的名称,它将被当作通配符使用。你可以使用这种方法打印一个错误信息。

try:
    print(x)
except:
    print('您遇到了错误')

(8)try except语句还有一个可选的else子句,如果使用这个子句,那么必须放在所有的except子句之后。这个子句将在try子句没有发生任何异常的时候执行。

try:
    print(x)
except:
    print('您遇到了错误')
else:
    print('前面没有发生任何错误')

(9)异常处理并不仅仅处理那些直接发生在try子句中的异常,而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。

def this_fails():
    x = 1 / 0

try:
    this_fails()
except ZeroDivisionError as err:
    print('0不能作为除数', err)

(10)try……finally 语句,无论是否发生异常,都会执行finally块的代码

try:
    print(11)
except:
    pass
finally:
    print('hh')

抛出异常(主动触发异常)

之所以我们能捕获异常,那是因为代码执行的时候,系统给我们抛出了异常。其实我们也可以手动自行抛出异常。

def xx():
    raise Exception('错误', 1111)


try:
    xx()
except Exception as e:
    print(e)

转载于:https://www.cnblogs.com/imshun/p/10492171.html


http://www.niftyadmin.cn/n/4556319.html

相关文章

微信小程序 - loading(组件)

更新日期&#xff1a; 2019/3/8&#xff1a;首次发布 2019/3/12&#xff1a;增加loadOpacity透明度控制&#xff0c;默认0.5. 以及修改居中方式 Loading 参数&#xff1a; 1. type&#xff1a;loading&#xff08;必需参数&#xff09; 2. isLoading: 是否显示加载 3. loadColo…

Python 使用正则表达式匹配电子邮箱

如下&#xff1a; In [1]: import reIn [2]: email "1210640219qq.com"In [3]: regular re.compile(r[0-9a-zA-Z.][0-9a-zA-Z.]?com)In [4]: re.findall(regular, email) Out[4]: [1210640219qq.com] 转载于:https://www.cnblogs.com/pzk7788/p/10498176.html

C语言要用什么软件呀 麻烦各位帮个忙

答案补充 看你的思维模式 有需要可以向我要 Turbo C也不错 就看谭浩强的 C语言程序设计 习惯看国内的 用Visual C是比较好的选择 在windows下 我觉得 谭浩强教授写的那本是最好的我这有电子版 1、Tc 2.02、Vc 6.0等 答案补充 教材 绿色的 ||| 看你要在什么操作系统下编程

洛谷 - P1801 - 黑匣子 - 对顶堆

这道题是提高省选-的难度&#xff0c;做出来的话对数据结构题目的理解会增加很多。 可以使用一种叫做对顶堆的东西&#xff0c;对顶堆是在线维护第n小的logn的算法。大概的思路是&#xff0c;假如我们要找的是第n小&#xff0c;我们就维护一个大小为n的&#xff08;位于下方的&…

周学习总结

花费时间&#xff1a;3.53.52.53.5215小时 代码行数&#xff1a;400左右 学习内容&#xff1a;jsp基本语法&#xff08;学自jsp基础教程&#xff09;&#xff0c;java web&#xff08;bilibili视频&#xff09;。转载于:https://www.cnblogs.com/lianghang/p/10502654.html

PostProcessing后期处理插件

PostProcessing后期处理插件 先占个位置posted on 2019-03-10 13:08 青先生 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/Mr-QingZi/p/10504986.html

c#线程2

多线程中很有可能存在争夺一个变量资源而产生死锁或者不被期望的结果。 测试类; class TestClass{private int num 100;private object objLock new object();public void MissYou(){while (true){lock (objLock){SomeTest();}}}public void SomeTest(){num;if (num 100){Co…

C#操作文本文件

123 12 1 StringSplitOptions.None);//分成数组你要书一下 用StreamWriter的WriteLine()方法写入 怎么提交了呢- -string[] spliter { "/r/n" };//换行符分割string[] configs configstr.Split(spliter 没答完呢 把这个字符串用Split()方法分割 答案补充 郁闷 把文…