1 name 2 结果为: 3 Traceback (most recent call last): #错误的追溯 4 File "C:/Users/Mi/PycharmProjects/untitled/Practice/练习.py", line 1, in <module> #xx文件的xx行 5 name #xx句 6 NameError: name 'name' is not defined 7 #错误类型 具体的错误内容
以上是使用PyCharm执行代码时会报错的一个例子.
1 def func1():name 2 3 def func2(): 4 func1() 5 6 def main(): 7 func2() 8 9 main()
#在嵌套调用的过程中,内部的代码出了问题,外部所有的调用的地方都成为报错追溯信息的一部分
10 11 结果为: 12 Traceback (most recent call last): 13 File "C:/Users/Mi/PycharmProjects/untitled/Practice/练习.py", line 9, in <module> 14 main() 15 File "C:/Users/Mi/PycharmProjects/untitled/Practice/练习.py", line 7, in main 16 func2() 17 File "C:/Users/Mi/PycharmProjects/untitled/Practice/练习.py", line 4, in func2 18 func1() 19 File "C:/Users/Mi/PycharmProjects/untitled/Practice/练习.py", line 1, in func1 #多行异常的时候 看最后一行的内容 20 def func1():name 21 NameError: name 'name' is not defined
以上是多行报错的一个例子.
=============================================================================================================
异常处理
单分支
l = ['login','register'] for num,i in enumerate(l,1): print(num,i) try: #try和except之间是被异常处理机制包围的代码,只有这段代码出现异常,才会处理.一但这段代码出现异常,程序会继续往下走. num = int(input('num >>>')) print(l[num - 1]) except ValueError : # except处理的异常必须和实际报错的异常是相同的 print('请输入一个数字') print(l[num - 1])
多分支
1 l = ['login','register'] 2 for num,i in enumerate(l,1): 3 print(num,i) 4 5 try: 6 num = int(input('num >>>')) 7 print(l[num - 1]) 8 except ValueError : 9 # 从上向下报错的代码只要找到一个和报错类型相符的分支就执行这个分支中的代码,然后直接退出分支 10 print('请输入一个数字') 11 except IndexError : 12 # 如果找不到能处理和报错类型相同的分支,会一直往下走,最后还是没有找到就会报错 13 print('只能输入1或2')
多分支合并
1 l = ['login','register'] 2 for num,i in enumerate(l,1): 3 print(num,i) 4 5 try: 6 num = int(input('num >>>')) 7 print(l[num - 1]) 8 except (ValueError,IndexError) : #做相同的处理时,可以将异常合并 9 print('您输入的内容不合法')
万能异常
1 def buy(): 2 print('buy') 3 name 4 5 def back(): 6 print('back') 7 [][1] 8 9 def show(): 10 print('show') 11 1/0 12 13 def main(): 14 l = [('购物',buy),('退货',back),('查看订单',show)] 15 while True: 16 for num,i in enumerate(l,1): 17 print(num,i[0]) 18 num = int(input('num >>>')) 19 print(l[num - 1]) 20 try: 21 func = l[num - 1][1] 22 func() 23 except Exception: 24 print('用户在选择了%s操作之后发生了不可知的异常' % l[num - 1][0]) 25 26 main()
as语法
1 # as语法 能够将具体错误信息打印出来 2 def buy(): 3 print('buy') 4 name 5 6 def back(): 7 print('back') 8 [][1] 9 10 def show(): 11 print('show') 12 1/0 13 14 def main(): 15 l = [('购物',buy),('退货',back),('查看订单',show)] 16 while True: 17 for num,i in enumerate(l,1): 18 print(num,i[0]) 19 num = int(input('num >>>')) 20 print(l[num - 1]) 21 try: 22 func = l[num - 1][1] 23 func() 24 except Exception as e: 25 print(e) 26 #print(e.args,e.__traceback__.tb_lineno,e.__traceback__.tb_frame) 27 print('用户在选择了%s操作之后发生了不可知的异常' % l[num - 1][0]) 28 29 main()