Python NameError: 名前 Execfile が定義されていません
-
Python 3 の
execfile()
の代替 -
exec()
を使用して Python ファイルを実行する -
with
ブロックを使用してexec()
を使用して Python ファイルを実行する
Python 2 には、組み込み関数 execfile()
があり、ファイルが解析され、Python ステートメントとして評価されます。 この関数は Python 3 にはありません。
この記事では、Python 3 でファイルを実行する代替案を示します。
Python 3 の execfile()
の代替
Python 2 では、関数 execfile()
を使用してファイルを実行します。 Python 3 には、exec()
と呼ばれる同様の関数があります。
まず、ファイルを開いて読み取り、それを引数として exec()
関数に渡します。
Python 3 の exec()
関数
Python exec()
関数は、文字列として渡された、動的に作成されたコード ブロックを実行します。
一般的な構文:
pythonCopy# Python 3.x
exec(object, global, local)
exec()
関数には 3つのパラメーターが必要です。
object
は、文字列または複数行のコードにすることができます。global
パラメータは辞書にすることができます。local
はマッピング辞書にすることができます。
local
と global
パラメータはどちらもオプションです。 また、exec()
は void 関数であり、値を返しません。
以下のコードは、この関数の基本的な動作を示しています。 "programming is fun"
という文字列は、次のコードで出力されます。
3つの数学演算が実行され、exec()
関数に個別に渡されます。
同様に、文字列に複数の行を追加できます。各行は解析され、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
を相対ディレクトリに作成しました。
pythonCopy# Python 3.x
print("Delftstack")
このファイルを Python コードで実行するには、最初に open()
を使用して開き、次に read()
関数を使用して読み取り、最後に exec()
関数を使用して実行します。
コード例:
pythonCopy# Python 3.x
exec(open("myfile.py").read())
出力:
textCopyDelftstack
with
ブロックを使用して exec()
を使用して Python ファイルを実行する
with
ブロックは、ファイルがブロックの最後に到達したときに安全に (自動的に) ファイルを閉じ、ファイルが開いたままにならないようにします。
コード例:
pythonCopy# Python 3.x
with open("myfile.py", "r") as f:
exec(f.read())
出力:
textCopyDelftstack
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
- AttributeError の解決: 'list' オブジェクト属性 'append' は読み取り専用です
- AttributeError の解決: Python で 'Nonetype' オブジェクトに属性 'Group' がありません
- AttributeError: 'generator' オブジェクトに Python の 'next' 属性がありません
- AttributeError: 'numpy.ndarray' オブジェクトに Python の 'Append' 属性がありません
- AttributeError: Int オブジェクトに属性がありません
- AttributeError: Python で 'Dict' オブジェクトに属性 'Append' がありません