2016-08-10 6 views
0

Pythonの初心者です。 デバッグの目的で私のコードをmainで停止したいと思います。私は検査したい変数値を出力するためにロギングモジュールを使用します。python sys.exit:整数が必要です(strを持っていますか?)

ただし、エラーが発生します。それを解決する方法がわからない。 私はまた、コードの小さな部分だけを実行する正しい方法は、デバッグポイントを設定する代わりにsys.exitを使用するのだろうか。私のメインは長く、毎回全部を走らせたくありません。

import linecache 
import logging 
import sys 

import pandas as pd 


def print_exception(): 
    exc_type, exc_obj, tb = sys.exc_info() 
    f = tb.tb_frame 
    lineno = tb.tb_lineno 
    filename = f.f_code.co_filename 
    linecache.checkcache(filename) 
    line = linecache.getline(filename, lineno, f.f_globals) 
    print('EXCEPTION IN ({}, LINE {} "{}"): {}'.format(filename, lineno, line.strip(), exc_obj)) 


if __name__ == "__main__": 
    try: 
     logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') 
     df = pd.DataFrame({'A': [0, -1, 3, 5, 4, 2, 1], 
          'B': [12, 12, 14, 15, 14, 16, 200]}) 

     sys.exit('error') 



    except: 
     print_exception() 

EXCEPTION IN (<ipython-input-9-f42a2adee11e>, LINE 49 "sys.exit('error')"): an integer is required (got type str) 

更新:完全なコードを更新しました。私はpython3でPycharmを使っています。

+4

これは他の人たちと同じように些細なことではないと思います。 OPのsys.exitの使用は、ドキュメントと一貫しています。 – Karin

+5

@wimこのコードはPython 2.7.8で正常に動作し、sys.exit()のドキュメントと一貫しています。私は、このコードにはない文脈の問題があると思う(明らかに49行ではないので)。 – Lost

+1

@カリン私は同意すると、人々は額面でエラーを犯していると思うが、この使用法はLinuxとWindowsの両方で素早くテストされており、ドキュメントの一貫性があるので、何かが続いている。 Python 3をまだ試していないのですが、 – Lost

答えて

3

なければならない、私はあなたの問題がPyCharmが内部)(sys.exitを処理しようとしているとそれがないということである疑いがありますあなたがカスタムエラーメッセージを使用しているという事実のように。 PythonのロギングがSpyderで正しく動作していないなど、他のIDEにも同様の問題があります(5月か今までに解決されていない可能性があります)。

あなたの使用法自体は有効で、Python3のドキュメントと一貫しているようですが、私のシステムでコードを実行するのに問題はなく、期待どおりに実行しました。

Pythonでコードを直接実行し、PyCharmを使用しないでコードを実行し、問題が解決するかどうかを確認することをお勧めします。 python3がデフォルトのPythonのインストールである場合は、あなただけのファイルのディレクトリと型にBASHターミナルまたはコマンドプロンプトを開くために必要があります:

python file-name.py 

ターミナルでプログラムを実行します。私はこれがうまく動作すると思うし、ここで実際に行ったことはあなたのプログラムをデバッグするのではなく、pycharmのバグ(または機能)を見つけました。

-7

従来のUnixリターンコード(エラーがない場合は0、悪い場合は0より大きい整数)が必要です。デバッグの面では

、あなたがIDLE IDEを試し、またはコメントの議論からpdb

+4

これは間違いです。少なくともPython 2.7ではこれが有効なコードです。別の問題があるはずです – Glostas

+1

これはPython 3でも間違っています。質問に対する私のコメントのdocsリンクを見てください。 –

関連する問題