Python进阶


文章目录

  • Python进阶
  • 1.Exception
  • 1.1捕获异常
  • 2.Raise
  • 3.断言
  • 2.命名空间


1.Exception

1.1捕获异常

Python进阶_全局变量

捕捉一个异常

# 示例一
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)