2016-10-04 5 views
0

私はvk.comのための簡単なWebインタープリタを書いています。私はメッセージを探し、それらが有効なPythonコードであるかどうかを確認してから、そのコードを実行して、stdoutをコード送信者に返します。コードチェッカー以外は何も実装していません。文字列に有効なPythonコードが含まれているかどうかをチェック

import ast 

def is_valid(code): 
    try: 
     ast.parse(code) 
    except SyntaxError: 
     print('Input isnt code.') 
     return False 
    print('Code is ok.') 
    return True 

is_valid()常に

+0

「True」を返す非コードの例を挙げることができますか? – AChampion

+0

>>> is_valid( 'test') コードはOKです。 真 – MaxLunar

+4

これは有効なコードです。識別子です。 – AChampion

答えて

1

は覚えておいてください...かかわらず、本当に混乱し。イムに来るもののTrueを返し、ランタイムエラーとパーサエラーとの違いは、あなたのケースと例で重要です。声明:

test 

有効コードです。 Python VMがコードを実行するときにこの文がNameErrorを投げたとしても、パーサーは文が解析される前に実際に値が割り当てられていないことを認識しないため、構文エラーではなくランタイムエラーです。

+0

ありがとう!私はNameErrorを投げて修正してから – MaxLunar

+1

@MaxLunarあなたはNameErrorを投げることができません。なぜなら、ユーザのコードが値を割り当てられていない変数を使用していることをどのように知っているからでしょうか? –

+0

@MaxLunarあなたはここで誤解があると思います。 'x + 1'は有効なコードですか? –

関連する問題