最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python新手常见问题九:不能区分py2和py3

    正文概述    2020-06-03   291

    Python新手常见问题九:不能区分py2和py3

    不能区分Python 2和Python 3

    看下面这个文件foo.py:

    import sys
    def bar(i):
        if i == 1:
            raise KeyError(1)
        if i == 2:
            raise ValueError(2)
     
    def bad():
        e = None
        try:
            bar(int(sys.argv[1]))
        except KeyError as e:
            print('key error')
        except ValueError as e:
            print('value error')
        print(e)
     
    bad()

    在Python 2里,运行起来没有问题:

    $ python foo.py 1
    key error
    1
    $ python foo.py 2
    value error
    2

    但是如果拿到Python 3上面玩玩:

    $ python3 foo.py 1
    key error
    Traceback (most recent call last):
      File "foo.py", line 19, in <module>
        bad()
      File "foo.py", line 17, in bad
        print(e)
    UnboundLocalError: local variable 'e' referenced before assignment

    这是怎么回事?“问题”在于,在Python 3里,在except块的作用域以外,异常对象(exception object)是不能被访问的。(原因在于,如果不这样的话,Python会在内存的堆栈里保持一个引用链直到Python的垃圾处理将这些引用从内存中清除掉。更多的技术细节可以参考这里。)

    相关推荐:《Python视频教程》

    避免这样的问题可以这样做:保持在execpt块作用域以外对异常对象的引用,这样是可以访问的。下面是用这个办法对之前的例子做的改动,这样在Python 2和Python 3里面都运行都没有问题。

    import sys
     
    def bar(i):
        if i == 1:
            raise KeyError(1)
        if i == 2:
            raise ValueError(2)
     
    def good():
        exception = None
        try:
            bar(int(sys.argv[1]))
        except KeyError as e:
            exception = e
            print('key error')
        except ValueError as e:
            exception = e
            print('value error')
        print(exception)
     
    good()

    在Py3k里面运行:

    $ python3 foo.py 1
    key error
    1
    $ python3 foo.py 2
    value error
    2

    相关推荐:

    Python新手常见问题八:标准库模块命名


    下载网 » Python新手常见问题九:不能区分py2和py3

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元