簡體   English   中英

Python 2和3中捕獲的異常實例的范圍

[英]Scope of caught exception instance in Python 2 and 3

因為Python中的變量可以在它們的循環之外訪問並try - except塊,我天真地認為下面的這段代碼片段可以正常工作,因為e可以訪問:

try:
    int('s')
except ValueError as e:
    pass
print(e)

在Python 2(2.7測試)中,它確實按預期工作,輸出為:

invalid literal for int() with base 10: 's'

但是,在Python 3中,我很驚訝輸出是:

NameError: name 'e' is not defined

為什么是這樣?

我后來找到了答案,因為PEP 3110解釋說,在Python 3中,在except套件的末尾刪除了被捕獲的名稱,以實現更高效的垃圾回收。 如果您希望避免這種情況,還有推薦的語法:

有必要將異常實例保留在除套件末尾之外的情況可以像這樣輕松轉換

 try: ... except E as N: ... ... 

 try: ... except E as N: n = N ... … 

這樣,當在塊的末尾刪除N時,n將保持並且可以正常使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM