Python进阶
文章目录
- Python进阶
- 1.Exception
- 1.1捕获异常
- 2.Raise
- 3.断言
- 2.命名空间
1.Exception
1.1捕获异常
捕捉一个异常
# 示例一
try:
print 2/0
except ZeroDivisionError:
print '除数不能为0'
# 示例二
try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except OSError as err:
print("OS error: {0}".format(err))
except ValueError:
print("Could not convert data to an integer.")
except:
print("Unexpected error:", sys.exc_info()[0])
raise
捕捉多个异常
# 方式一
try:
print 2/'0'
except ZeroDivisionError:
print '除数不能为0'
except Exception:
print '其他类型异常'
# 方式二
try:
print 2/'0'
except (ZeroDivisionError,Exception):
print '发生了一个异常'
捕获异常信息
try:
print 2/'0'
except (ZeroDivisionError,Exception) as e:
# unsupported operand type(s) for /: 'int' and 'str'
print e
2.Raise
raise是什么意思呢?raise是用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类。
raise [Exception [, args [, traceback]]]
示例:
# 示例一
x = 10
if x > 5:
raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
# 示例二
try:
raise NameError('HiThere') # 模拟一个异常。
except NameError:
print('An exception flew by!')
raise
# 示例三
try:
print('come in')
except Exception:
raise Exception('提示信息: do something')
3.断言
Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。
# 示例一
import sys
assert ('linux' in sys.platform), "该代码只能在 Linux 下执行"
# 接下来要执行的代码
2.命名空间
命名空间查找顺序:
假设我们要使用变量 runoob,则 Python 的查找顺序为:局部的命名空间 -> 全局命名空间 -> 内置命名空间。
如果找不到变量 runoob,它将放弃查找并引发一个 NameError 异常:
# var1 是全局名称
var1 = 5
def some_func():
# var2 是局部名称
var2 = 6
def some_inner_func():
# var3 是内嵌的局部名称
var3 = 7
全局变量和局部变量
# 示例二
#!/usr/bin/python3
total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
#返回2个参数的和."
total = arg1 + arg2 # total在这里是局部变量.
print ("函数内是局部变量 : ", total)
return total
#调用sum函数
sum( 10, 20 )
print ("函数外是全局变量 : ", total)
当内部作用域想修改外部作用域的变量时,就要用到 global 和 nonlocal 关键字了。
# 以下实例修改全局变量 num:
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
fun1()
print(num)