1

ボトルのソース コードを読んでいると、次のように表示されます。

eval(compile('def _raise(*a): raise a[0], a[1], a[2]', '<py3fix>', 'exec'))

についてのドキュメントを読みcompileましたが、一般的に使用されていることだけがわかりました<string>。また、stackoverflowでグーグル検索して検索しましたが、関連情報が見つかりません。

<py3fix>では、コンパイルにどのように影響するか誰か教えてもらえますか? また、他のファイル名はありますか?関連ドキュメントはどこにありますか?

前もって感謝します。

4

1 に答える 1

3

それはまったく影響しません。コンパイルされたコードがどこから来たのかを識別するために使用される単なる名前であるため、必要な文字列を使用できます。

ドキュメントが言うように:

コンパイル(ソース、ファイル名、モード[、フラグ[、dont_inherit]])

filename 引数は、コードが読み取られたファイルを指定する必要があります。ファイルから読み取られなかった場合は、認識可能な値を渡します ('< string>' が一般的に使用されます)。

sourceがファイルから読み取られていない場合 (ここのように) <string>、このコードが書き込まれた文字列からコンパイルされていることがわかるように、 を使用することをお勧めします。


コードをコミットした人は、Bottle Python 2/3 のバグを修正するときにそれを行いました。したがって、ユーザーが 2.x を実行しているときに<py3fix>、彼がコンパイルしたものからアサーションが発生したことを識別する方法として、彼が使用したと推測しています。def _raise

>>> eval(compile('def _raise(*a): raise a[0], a[1], a[2]', '<py3fix>', 'exec'))
>>> _raise(Exception, "error message", None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<py3fix>", line 1, in _raise
Exception: error message

>>> eval(compile('def _raise(*a): raise a[0], a[1], a[2]', '<my_source_file>', 'exec'))
>>> _raise(Exception, "error message", None)Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<my_source_file>", line 1, in _raise
Exception: error message
于 2013-06-22T05:13:35.913 に答える