linux命令大全
http://blog.51cto.com/mageedu/1637514
给小白的 Nginx 30分钟入门指南
http://blog.51cto.com/mageedu/2066726
使用except而不带任何异常类型
你可以不带任何异常类型使用except,如下实例:
http://blog.51cto.com/mageedu/2067163
try:
正常的操作
......................
except:
发生异常则执行此处代码
......................
else:
没有异常则执行此处代码
使用except而带多种异常类型
你也可以使用相同的except语句来处理多个异常信息,如下所示:
try:
正常的操作
......................
except(Exception1[, Exception2[,...ExceptionN]]]):
发生以上多个异常中的一个,执行这块代码
......................
else:
如果没有异常执行这块代码
try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。
try:
<语句>
finally:
<语句> #退出try时总会执行
raise
捕捉异常可以使用try/except语句。
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生
def div(a, b):
try:
print(a / b)
except ZeroDivisionError:
print("Error: b should not be 0 !!")
except Exception as e:
print("Unexpected Error: {}".format(e))
else:
print('Run into else only when everything goes well')
finally:
print('Always run into finally block.')
# tests
div(2, 0)
div(2, 'bad type')
div(1, 2)
# Mutiple exception in one line
try:
print(a / b)
except (ZeroDivisionError, TypeError) as e:
print(e)
# Except block is optional when there is finally
try:
open(database)
finally:
close(database)
# catch all errors and log it
try:
do_work()
except:
# get detail from logging module
logging.exception('Exception caught!')
# get detail from sys.exc_info() method
error_type, error_value, trace_back = sys.exc_info()
print(error_value)
raise
总结如下:
except语句不是必须的,finally语句也不是必须的,但是二者必须要有一个,否则就没有try的意义了。
except语句可以有多个,Python会按except语句的顺序依次匹配你指定的异常,如果异常已经处理就不会再进入后面的except语句。
except语句可以以元组形式同时指定多个异常,参见实例代码。
except语句后面如果不指定异常类型,则默认捕获所有异常,你可以通过logging或者sys模块获取当前异常。
如果要捕获异常后要重复抛出,请使用raise,后面不要带任何参数或信息。
不建议捕获并抛出同一个异常,请考虑重构你的代码。
不建议在不清楚逻辑的情况下捕获所有异常,有可能你隐藏了很严重的问题。
尽量使用内置的异常处理语句来 替换try/except语句,比如with语句,getattr()方法。