回味Python2.7——笔记3

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回味Python2.7——笔记3相关的知识,希望对你有一定的参考价值。

一、错误和异常

1、异常处理

>>> while True:
...     try:
...         x = int(raw_input("Please enter a number: "))
...         break
...     except ValueError:
...         print "Oops!  That was no valid number.  Try again..."
...

try 语句按如下方式工作:

  • 首先,执行 try 子句 (在 try 和 except 关键字之间的部分)。
  • 如果没有异常发生, except 子句 在 try 语句执行完毕后就被忽略了。
  • 如果在 try 子句执行过程中发生了异常,那么该子句其余的部分就会被忽略。如果异常匹配于 except 关键字后面指定的异常类型,就执行对应的 except 子句。然后继续执行 try 语句之后的代码。
  • 如果发生了一个异常,在 except 子句中没有与之匹配的分支,它就会传递到上一级 try语句中。如果最终仍找不到对应的处理语句,它就成为一个 未处理异常 ,终止程序运行,显示提示信息。

一个 try 语句可能包含多个 except 子句,分别指定处理不同的异常。至多只会有一个分支被执行。异常处理程序只会处理对应的 try 子句中发生的异常,在同一个 try 语句中,其他子句中发生的异常则不作处理。一个 except 子句可以在括号中列出多个异常的名字,例如:

... except (RuntimeError, TypeError, NameError):
...     pass

最后一个 except 子句可以省略异常名称,以作为通配符使用。 

while True:
    try:
        x=input(please enter the first number:)
        y=input(please enter the second number:)
        print 1.*x/y
    except:
        print something wrong happened! enter again!
    else:
        break
please enter the first number:1
please enter the second number:w
something wrong happened! enter again!

2、 else
try
 ... except 语句可以带有一个 else子句 ,该子句只能出现在所有 except 子句之后。当 try 语句没有抛出异常时,需要执行一些代码,可以使用这个子句
for arg in sys.argv[1:]:
    try:
        f = open(arg, r)
    except IOError:
        print cannot open, arg
    else:
        print arg, has, len(f.readlines()), lines
        f.close()

使用 else 子句比在 try 子句中附加代码要好,因为这样可以避免 try ... except 意外的截获本来不属于它们保护的那些代码抛出的异常。

3、抛出异常

raise 语句允许程序员强制抛出一个指定的异常。

>>> raise NameError(HiThere)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: HiThere

4、 用户自定义异常

在程序中可以通过创建新的异常类型来命名自己的异常(Python 类的内容请参见  )。异常类通常应该直接或间接的从 Exception 类派生

>>> class MyError(Exception):
...     def __init__(self, value):
...         self.value = value
...     def __str__(self):
...         return repr(self.value)
...
>>> try:
...     raise MyError(2*2)
... except MyError as e:
...     print My exception occurred, value:, e.value
...
My exception occurred, value: 4
>>> raise MyError(oops!)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
__main__.MyError: oops!

5、finally

不管有没有发生异常, finally子句 在程序离开 try 后都一定会被执行。当 try 语句中发生了未被 except 捕获的异常(或者它发生在 except 或 else 子句中),在 finally 子句执行完后它会被重新抛出。 try 语句经由 break ,continue 或 return 语句退 出也一样会执行 finally 子句

>>> def divide(x, y):
...     try:
...         result = x / y
...     except ZeroDivisionError:
...         print "division by zero!"
...     else:
...         print "result is", result
...     finally:
...         print "executing finally clause"
...
>>> divide(2, 1)
result is 2
executing finally clause
>>> divide(2, 0)
division by zero!
executing finally clause
>>> divide("2", "1")
executing finally clause
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<stdin>", line 3, in divide
TypeError: unsupported operand type(s) for /: str and str

 




以上是关于回味Python2.7——笔记3的主要内容,如果未能解决你的问题,请参考以下文章

回味Python2.7——笔记2

Tensorflow Numpy不能在ipython笔记本上运行Python2.7和3.5

再次回味Python2——笔记

Python-Django框架学习笔记——第二课:Django的搭建

Ubuntu上安装TensorFlow(python2.7版)

python2.7 爬虫_爬取小说盗墓笔记章节及URL并导入MySQL数据库_20161201