异常:
在程序执行过程中发生的任何错误都是异常。每个异常显示一些相关的错误信息,比如你在 Python3 中使用 Python2 独有的语法就会发生 SyntaxError
不小心在行首多打了一个空格就会产生 IndentationError:
当访问一个未定义的变量则会发生 NameError
最后一行包含了错误的详细信息,其余行显示它是如何发生(或什么引起该异常)的详细信息
TypeError 也是一种经常出现的异常。当操作或函数应用于不适当类型的对象时引发,一个常见的例子是对整数和字符串做加法
处理异常:
使用 try...except 块来处理任意异常
try:
statements to be inside try clause
statement2
statement3
...
except ExceptionName:
statements to evaluated in case of ExceptionName happens
首先,执行 try 子句 (在 try 和 except 关键字之间的部分)。
如果没有异常发生,except 子句 在 try 语句执行完毕后就被忽略了。
如果在 try 子句执行过程中发生了异常,那么该子句其余的部分就会被忽略。
如果异常匹配于 except 关键字后面指定的异常类型,就执行对应的 except 子句。然后继续执行 try 语句之后的代码。
如果发生了一个异常,在 except 子句中没有与之匹配的分支,它就会传递到上一级 try 语句中。
如果最终仍找不到对应的处理语句,它就成为一个 未处理异常,终止程序运行,显示提示信息。
使用 raise 语句抛出一个异常。
定义清理行为:
try 语句还有另一个可选的 finally 子句,目的在于定义在任何情况下都一定要执行的功能
不管有没有发生异常,finally 子句 在程序离开 try后都一定会被执行。当 try 语句中发生了未被 except捕获的异常(或者它发生在 except 或 else 子句中),在 finally 子句执行完后它会被重新抛出。
在真实场景的应用程序中,finally 子句用于释放外部资源(文件或网络连接之类的),无论它们的使用过程中是否出错。
实现一个程序,将分钟转为小时和分钟:
注意:代码中不要使用 input() 函数,否则挑战测试会卡住,出现 Timeout 的报错。
在 MinutesToHours.py 文件中实现一个函数 Hours(),将用户输入的 分钟数 转化为 小时数和分钟数,并要求小时数尽量大。将结果以 XX H, XX M 的形式打印出来。
要求:
- 用户能够通过命令行参数输入分钟数,不要使用
input,命令行参数可以使用sys.argv来提取。例如程序执行为python3 MinutesToHours.py 80,传入的参数 80 就是分钟数,程序需要打印出相应的小时数和分钟数,输出为1 H, 20 M。 - 如果用户输入的是一个负值,程序需要 raise 来抛出
ValueError异常。 -
Hours()函数调用的时候,需要使用try...except处理异常。获取异常后,在屏幕上打印出Parameter Error提示用户输入的值有误。
-
sys.argv获取命令行参数,注意获取的参数为字符串,可以使用int()将字符串转为整数,此处也可能会出现异常情况,例如输入为 "abcd" 是无法转为整数的 -
raise语句 -
try...except语句