Python NameError: 名前 Execfile が定義されていません

Fariba Laiq 2023年6月21日
  1. Python 3 の execfile() の代替
  2. exec() を使用して Python ファイルを実行する
  3. with ブロックを使用して exec() を使用して Python ファイルを実行する
Python NameError: 名前 Execfile が定義されていません

Python 2 には、組み込み関数 execfile() があり、ファイルが解析され、Python ステートメントとして評価されます。 この関数は Python 3 にはありません。

この記事では、Python 3 でファイルを実行する代替案を示します。

Python 3 の execfile() の代替

Python 2 では、関数 execfile() を使用してファイルを実行します。 Python 3 には、exec() と呼ばれる同様の関数があります。

まず、ファイルを開いて読み取り、それを引数として exec() 関数に渡します。

Python 3 の exec() 関数

Python exec() 関数は、文字列として渡された、動的に作成されたコード ブロックを実行します。

一般的な構文:

Python
 pythonCopy# Python 3.x
exec(object, global, local)

exec() 関数には 3つのパラメーターが必要です。

  1. object は、文字列または複数行のコードにすることができます。
  2. global パラメータは辞書にすることができます。
  3. local はマッピング辞書にすることができます。

localglobal パラメータはどちらもオプションです。 また、exec() は void 関数であり、値を返しません。

以下のコードは、この関数の基本的な動作を示しています。 "programming is fun" という文字列は、次のコードで出力されます。

3つの数学演算が実行され、exec() 関数に個別に渡されます。

同様に、文字列に複数の行を追加できます。各行は解析され、Python ステートメントと見なされて実行されます。

コード例:

Python
 pythonCopy# Python 3.x
exec('print("programming is fun")')
exec('x=4; y=9; print("Multiplication:", x*y)')
w = 200
exec("print(w == 200)")
exec("print(w / 100)")

出力:

 textCopyprogramming is fun
Multiplication: 36
True
2.0

exec() を使用して Python ファイルを実行する

ここで、コード内で外部の Python ファイルを実行する場合は、まずファイルを開き、それを読み取り、引数として exec() 関数に渡す必要があります。

ここでは、次のコードを含むファイル myfile.py を相対ディレクトリに作成しました。

Python
 pythonCopy# Python 3.x
print("Delftstack")

このファイルを Python コードで実行するには、最初に open() を使用して開き、次に read() 関数を使用して読み取り、最後に exec() 関数を使用して実行します。

コード例:

Python
 pythonCopy# Python 3.x
exec(open("myfile.py").read())

出力:

 textCopyDelftstack

with ブロックを使用して exec() を使用して Python ファイルを実行する

with ブロックは、ファイルがブロックの最後に到達したときに安全に (自動的に) ファイルを閉じ、ファイルが開いたままにならないようにします。

コード例:

Python
 pythonCopy# Python 3.x
with open("myfile.py", "r") as f:
    exec(f.read())

出力:

 textCopyDelftstack
著者: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

関連記事 - Python Error