Python Exception class中的args属性

话说今天青蛙遇到了一个bug,在某个Exception里抛出了TypeError Exception, 青蛙仔细查了半天,才想到Exception有一个内置属性args,刚好跟这个Exception 定义中的args重名。

首先看下这个Exception的定义:

In [4]: class E(Exception):
    def __init__(self, a, b, c):
        Exception.__init__(self)
        self.a = a
        self.args = b
        self.c = c
    def __str__(self):
        return "a = %r, b = %r, c = %r" % (self.a, self.args, self.c)
....:

当这个Exception被触发时,又引发了一个TypeError:

In …
more ...

Python中关于变量作用域的一些demo

其实青蛙不是很想在blog里面说编程方面的东西,毕竟青蛙自己只 是个半调子,怕言多有失。不过这次遇到了一个很常见又很有趣的 问题,记下一笔,权当取乐。

话说上周一个同事在patch里面使用了一种比较hacker的方法[1]:

使用定义list成员的方式把函数的局部变量传递给sub-function并 在sub-function修改其内容。

这种做法被其他同事猛烈的抨击,实际上在python2.x中,因为语言 实现的问题,嵌套的子函数是没法直接写它的上层函数的变量的。

这个问题之前在Team内部没有引起足够的重视,大家习以为常的在 子函数里直接给一个父函数的变量赋值,结果都是错的,这个赋值 操作会直接引发异常。

有人总结了一下python嵌套子函数访问变量的行为[2]:

In Python 2.x, it is not possible to modify a non-local variable;
you have either read-only access to a global or …
more ...