回味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、 elsetry ... 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‘
时间: 2024-12-30 03:17:59

回味Python2.7——笔记3的相关文章

回味Python2.7——笔记4

一.Python 标准库概览 1.操作系统接口 os 模块提供了很多与操作系统交互的函数: >>> import os >>> os.getcwd() # Return the current working directory 'C:\\Python27' >>> os.chdir('/server/accesslogs') # Change current working directory >>> os.system('mkdi

回味Python2.7——笔记2

一.模块 模块是包括 Python 定义和声明的文件.文件名就是模块名加上 .py 后缀.模块的模块名(做为一个字符串)可以由全局变量 __name__ 得到. 1. 模块可以导入其他的模块. 一个(好的)习惯是将所有的 import 语句放在模块的开始(或者是脚本),这并非强制. 被导入的模块名会放入当前模块的全局符号表中. from fibo import * :这样可以导入所有除了以下划线( _ )开头的命名. 需要注意的是在实践中往往不鼓励从一个模块或包中使用 * 导入所有,因为这样会让

python2 httplib 笔记

python2  httplib 笔记 #coding=utf-8 ''' Created on 2014年9月25日 @author: cocoajin ''' import httplib,urllib base='httpbin.org' #不需要添加 "http://" con=httplib.HTTPConnection(base) ip = '/ip' con.request('GET',ip) re=con.getresponse() print re.getheader

再次回味Python2——笔记

一.基本知识 1.一个值可以同时赋给几个变量: >>> x = y = z = 0 # Zero x, y and z >>> x 0 >>> y 0 >>> z 0 2.创建复数 >>> a=1+6j >>> x=complex(1,3) # x=1+3j>>>x.real1>>>x.imag 3 3.字符串 >>> 'spam eggs' '

Effective Python2 读书笔记1

Item 2: Follow the PEP 8 Style Guide Naming Naming functions, variables, attributes lowercase_underscore protected instance attributes _leading_underscore private instance attributes __double_leading_underscore classes, exceptions CapitalizedWord mod

Effective Python2 读书笔记2

Item 14: Prefer Exceptions to Returning None Functions that returns None to indicate special meaning are error prone because None and other values (e.g., zero, the empty string) all evaluate to False in conditional expressions. Raise exceptions to in

python2 urllib 笔记

import urllib base='http://httpbin.org/' ip=base+'ip' r=urllib.urlopen(ip) print r.geturl() print r.read() #get get=base+"get" parms=urllib.urlencode({"name":"tom","age":18}) r=urllib.urlopen("%s?%s"%(get,

OpenCV学习笔记(二十):Win8.1 64位+OpenCV 2.4.9+Python2.7.9配置

OpenCV提供了Python接口,主要特性包括: 提供与OpenCV 2.x中最新的C++接口极为相似的Python接口,并且包括C++中不包括的C接口 提供对OpenCV 2.x中所有主要部件的绑定:CxCORE (almost complete), CxFLANN (complete), Cv (complete), CvAux (C++ part almost complete, C part in progress), CvVidSurv (complete), HighGui (co

【学习笔记】python2和python3的input()

python2中的input()只接受变量作为传入值,非变量内容会报错. 1 >>> user=input("Enter your name:") 2 Enter your name:Kaito 3 Traceback (most recent call last): 4 File "<stdin>", line 1, in <module> 5 File "<string>", line 1