python入门基础6
异常:
在程序执行过程中发生的任何错误都是异常。每个异常显示一些相关的错误信息,比如你在 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
语句