2017-07-06 92 views
0

很多時候我們在某些用戶定義的函數中出現錯誤,並且想調試它。如果錯誤發生在主程序中,我們可以使用-i標誌來保存錯誤後的變量。但是如果錯誤發生在用戶定義的函數中,我們無法訪問函數的局部變量。有沒有辦法可以通過python代碼打開python解釋器,接受stdin的代碼並將輸出打印到stdout。事情是這樣的: -用本地變量使用python代碼運行python解釋器

def foo(): 
    x = 'Inside foo()' 
    run_interpreter() # Pauses for input 

foo() 

我們應該能夠給予下列輸入通過stdin: -

print(x) # prints 'Inside foo()' 
exit() # exits interpreter and resumes other code 

回答

-1

無法使用功能之外的功能的局部變量。

如果您可以在函數外使用變量,則需要聲明它爲global Variable by Using GLOBAL。

+0

用全局聲明局部變量將不必要地污染全局名稱空間 –

0

我發現了一個簡單的方法來做到這一點。我不知道是否有更好的辦法: -

import sys 
def interpreter(vars): 
    s = sys.stdin.readline().strip('\n') 
    while s!= 'exit()': 
     exec(s, globals(), vars) 
     s = sys.stdin.readline().strip('\n') 

我使用sys.stdin閱讀,對於空間的語句被正確解析。但是,這並不能提供解釋者的所有功能。我們無法使用箭頭鍵瀏覽歷史記錄。

這在調試中非常有用。無論何時出現錯誤,我都會在該行前調用interpreter(locals())來調查原因。我將它保存爲一個崇高的片段,以便它可以輕鬆地添加到任何Python代碼中。