猫史档案馆


【python:错误和异常】教你知错能改

用户:天上的流星_tianqiVirus天上的流星_tianqiVirus查看:1 回复:9 评论:1 创建时间:2019-08-12T09:10:11


python教程

对于程序错误的改法

 

如果你有什么没看懂的请千万不要看我以前的帖子,因为以前不讲这些

那么请回去学习学习python最基础的东西

 

先来给大家放一个反面教材

print(HelloUglyWorld)

这个程序错误在哪里呢

不是因为没加引号,而是这个HelloUglyWorld未定义

Traceback (most recent call last):
  File "C:/Users/LENOVO/Desktop/1.py", line 1, in <module>
    print(HelloUglyWorld)
NameError: name 'HelloUglyWorld' is not defined

由于HelloUglyWorld本来就是连在一起的,被判断成变量名也可以理解

如果他们是分开来的,像Hello 喵 world,那么就是语法错误,而非变量问题

center_image

这就是第一点,先搞清楚是为什么报错

接下来讲具体点的

python里有一个叫做try的而且很的语句可以帮助我们

try的字典里,从来就没有坚持二字,试不了就放弃

这个try要和except连用,不然也会报错

而且try报错语句下面的语句将不被运行

他们的用法如下

try:
    #语句
except:
    #try内的语句报错后运行的语句

就这样

except后不加东西就包括所有报错,如果你想指定是哪个方面报错,类似于是类型错误语法错误

那么就在except后面加上报错类型,比如说,变量名错误就是

#Bill Gates is a butterfly

try:
    print(HelloUglyWorld)
except NameError:
    print("Oops,NameError")

然后它就会说Oops,NameError,而不会报错

当然,也可以套两个except,比如说

#Bill Gates is a butterfly

try:
    print(HelloUglyWorld)
except NameError:
    print("Oops,NameError")
except TypeError:
    print("Oops,TypeError")

这也是可以的

然后是我们熟悉的else语句

这个语句是要放在except后,如果没有异常才运行的

#Bill Gates is a butterfly

try:
    print(HelloUglyWorld)
except NameError:
    print("Oops,NameError")
except TypeError:
    print("Oops,TypeError")
else:
    print("no error")

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

处理程序将只针对对应的try子句中的异常进行处理,而不是其他的 try 的处理程序中的异常

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

#Bill Gates is a butterfly

try:
    print(HelloUglyWorld)
except (NameError,TypeError):
    print("Oops,Error")
else:
    print("no error")

那我总得告诉你异常吧

告诉你的方法就是raise语句

简单点的方法就是直接在except里加上raise,如下

#Bill Gates is a butterfly

try:
    print(HelloUglyWorld)
except (NameError,TypeError):
    print("Oops,Error")
    raise
else:
    print("no error")

然后运行结果如下

Oops,Error
Traceback (most recent call last):
  File "C:\Users\LENOVO\Desktop\1.py", line 4, in <module>
    print(HelloUglyWorld)
NameError: name 'HelloUglyWorld' is not defined

很正规地抛出了异常

但是注意

如果没有异常,它反而会报错

#Bill Gates is a butterfly

try:
    print('HelloUglyWorld')
except (NameError,TypeError):
    print("Oops,Error")
    raise
else:
    print("no error")
    raise
HelloUglyWorld
no error
Traceback (most recent call last):
  File "C:\Users\LENOVO\Desktop\1.py", line 10, in <module>
    raise
RuntimeError: No active exception to reraise

Finally,终于到finally语句了

#Bill Gates is a butterfly

try:
    print(HelloUglyWorld)
except (NameError,TypeError):
    print("Oops,Error")
    raise
else:
    print("no error")
finally:
    exit = input('press enter to leave')

这货不管之前怎样都会运行,里面不止可以加input,也可以加其他的

Oops,Error
press enter to leave

懂了吗

(懂了什么呀)

 

这样,我们这一次的任务就完成了

想要继续学习pygame和游戏制作的请关注

id:天上的流星

本帖内的所有代码,思想仅供参考,请勿用于商业盈利用途

 


回复

上一页1 页 / 共 1下一页
银天X银天X

虽然我啥都看不懂
但我支持大佬

点赞0


评论


星空之忆星空之忆

呵呵

点赞0


评论


星空之忆星空之忆

还行吧,对新手来说很有用

点赞0


评论


嗯哼君 渠源嗯哼君 渠源

HelloUglyWorld???

emotion_雷电猴_疑问

点赞0


评论


codemaoooooooooooocodemaoooooooooooo

emotion_编程猫_翻白眼Ugly?

点赞0


评论


急_开_锁_办_证810864急_开_锁_办_证810864

“直接在except里加上raise”...

你并没有解释异常已经被捕捉了以后为什么还要继续原样抛出,这种做法有更深层次的理由。

点赞0


评论


QBZ_QBZ_

try,except方法顶多是让程序好看一点(没有错误)

点赞0


评论


QBZ_QBZ_

我的想法

点赞0


评论


无音音音音无音音音音

ugly world???

丑陋的世界???

点赞0


评论