Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでSyntaxError例外をキャッチする方法をわかりやすく解説

Pythonでは、パーサー(構文解析器)が理解できないソースコードを検出すると、必ずSyntaxErrorが発生します。このエラーは、モジュールのインポート時、exec()の実行時、あるいはeval()の呼び出し時などに起こり得ます。

SyntaxError例外には、入力テキストのどの部分がエラーの原因になったのかを正確に特定するための属性が用意されています。主な属性は以下のとおりです。

  • filename:エラーが発生したファイル名
  • lineno:エラーが発生した行番号
  • offset:行内でのエラー箇所の位置(列オフセット)
  • text:エラーが含まれていたソースコードの行

コード例

次のサンプルコードでは、try-except文を使ってSyntaxErrorを捕捉し、例外オブジェクトの属性からエラーの詳細情報を出力しています。

try:
    print(eval('six times seven'))
except SyntaxError as err:
    print('Syntax error %s (%s-%s): %s' % \
          (err.filename, err.lineno, err.offset, err.text))
    print(err)

実行結果

C:/Users/TutorialsPoint1/~.py
Syntax error <string> (1-9): six times seven
invalid syntax (<string>, line 1)

コードの解説

この例では、eval()に「six times seven」という不正な式を渡しているため、SyntaxErrorが発生します。except節で受け取った例外オブジェクトerrの各属性を参照することで、エラーが発生したファイル名・行番号・位置・該当行の内容を詳しく表示できます。

なお、Python 2では「except SyntaxError, err:」という記述形式でしたが、Python 3では「except SyntaxError as err:」のようにasキーワードを使う点に注意してください。現在Python 2はサポート終了しているため、新しいコードではPython 3の形式を採用しましょう。

  1. PythonでKeyError例外をキャッチする方法をわかりやすく解説

    Pythonでは、辞書(dict)に存在しないキーを使って値へアクセスしようとすると、KeyError例外が発生します。この記事では、try-except文を使ってKeyErrorをキャッチし、例外の種類や詳細情報を確認する方法を解説します。 KeyErrorが発生する仕組み 次のコードは、辞書に存在しないキー c で値を取得しようとしているため、KeyErrorが発生します。sys.exc_info() を使うと、発生した例外の型などの情報を取得できます。 import sys try: s = {a: 5, b: 7}[c] except: print(sys.exc_i

  2. Pythonのリスト内包表記で例外をキャッチするには?原因と対処法を解説

    Pythonには、例外を処理したり無視したりするための組み込み関数は存在しません。そのため、リスト内包表記の中ですべての例外を処理することは不可能です。 その理由は、リスト内包表記が「式(expression)」で構成されている点にあります。例外のキャッチや無視、ハンドリングを行えるのは「文(statement)」である try〜except ブロックだけだからです。式の中に try-except を埋め込むことは、Pythonの文法上できません。 現実的な回避策:関数へ処理を委譲する この制限に対する実用的な解決策のひとつが、例外が発生しうる部分式の評価を「関数」に委譲する方法です。関数の中