2017-07-03 27 views
2

この質問は以前に尋ねられましたが、私はthisなどの関連する質問で解決策を試してみました。PythonからiPython/Spyderを使用して終了する際の問題

私はPythonのexitコマンドに問題があり、私はvanilla Python 3が実行しているコードに問題がないと判断しました。問題は、iPythonまたはSpyderのiPythonコンソールで実行したときです。

私は単純なexitコマンドを使用すると、私はエラーを取得:

NameError: name 'exit' is not defined 

他のリンクにより示唆されるように、私はすでにSYSを輸入しています。私が得る、その場合には作品のようなものが(sys.exitを試してみることです唯一の事):

An exception has occurred, use %tb to see the full traceback. 

SystemExit 

C:\Users\sdewey\AppData\Local\Continuum\Anaconda3\lib\site- 
packages\IPython\core\interactiveshell.py:2870: UserWarning: To exit: use 
'exit', 'quit', or Ctrl-D. 
    warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1) 

それはあまり迷惑ですので、エラー・メッセージが小さいので、私はそれだけで「作品のようなもの」と言う:) 。

アイデア? iPythonの問題のようです。私はJupyter(iPythonを使用しています)で別の問題が発生しました。別に投稿しましたが、完全に無視されました。here

+0

SpyderのIPythonコンソールで実行しているときに、「exit」に問題はありません。単に現在のコンソールを閉じます(期待どおり)。 'quit'と' Ctrl + D 'についても同じことが言えます。しかし、 'sys.exit()'は投稿したメッセージを表示します。私はそれがIPythonの人々が現在のセッションを突然終了させるのを防ぐために導入されたと思います。私のバージョン:Spyder ** 3.1.4 **、IPython ** 5.3.0 **。 –

答えて

1

PycharmのIPythonシェルでexit()を含むスクリプトを実行しているときに同じ問題が発生しました。 私はhereを学びました。その出口はインタラクティブシェルを対象としているので、シェルの実装方法によって動作が異なります。

私は...

  • のtry/exceptsで
  • でコードを定着さためにあなたを強制しないトレースバック
  • を表示しませ終了
  • にカーネルを殺さないでしょう解決策を見つけ出すことができIPythonの有無にかかわらず、コードの変更なし

コードの下にあるコードから 'exit' endをIPythonで実行し、 'exit()'を呼び出すとうまくいくはずです。あなたはそれはあなたがそれを知らせることで、IPythonシェル中ほど静かに終了しない、(出口のためのちょうど別の名前である、代わりのquit)だけでなくjupyterでそれを使用することができます...

An exception has occurred, use %tb to see the full traceback. 

IpyExit 

""" 
# ipython_exit.py 
Allows exit() to work if script is invoked with IPython without 
raising NameError Exception. Keeps kernel alive. 

Use: import variable 'exit' in target script with 
    'from ipython_exit import exit'  
""" 

import sys 
from io import StringIO 
from IPython import get_ipython 


class IpyExit(SystemExit): 
    """Exit Exception for IPython. 

    Exception temporarily redirects stderr to buffer. 
    """ 
    def __init__(self): 
     # print("exiting") # optionally print some message to stdout, too 
     # ... or do other stuff before exit 
     sys.stderr = StringIO() 

    def __del__(self): 
     sys.stderr.close() 
     sys.stderr = sys.__stderr__ # restore from backup 


def ipy_exit(): 
    raise IpyExit 


if get_ipython(): # ...run with IPython 
    exit = ipy_exit # rebind to custom exit 
else: 
    exit = exit  # just make exit importable 
関連する問題