91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么避免不能區分py2和py3

發布時間:2020-08-25 11:39:59 來源:億速云 閱讀:131 作者:Leah 欄目:編程語言

怎么避免不能區分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的垃圾處理將這些引用從內存中清除掉。更多的技術細節可以參考這里。)

避免這樣的問題可以這樣做:保持在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

關于怎么避免不能區分py2和py3問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临城县| 阿鲁科尔沁旗| 都昌县| 四子王旗| 禹城市| 汶上县| 项城市| 江华| 阿勒泰市| 普兰店市| 大安市| 盈江县| 图片| 慈利县| 景宁| 钟祥市| 永嘉县| 红安县| 德保县| 阜南县| 弥渡县| 珲春市| 米易县| 宿迁市| 班戈县| 新闻| 抚顺县| 昭觉县| 中宁县| 大港区| 桦南县| 泰州市| 闸北区| 铁岭县| 神池县| 盐山县| 福贡县| 文山县| 黎川县| 张家界市| 乐平市|