[解決済み】新しい言語機能を使用するプログラムで、Pythonのバージョンを確認するにはどうすればよいですか?
質問
Pythonスクリプトを作成する際に、少なくとも特定の Pythonのバージョンで、優雅に失敗するための正しい方法は何ですか? スクリプトの起動に以前のバージョンの Python が使用された場合、そのスクリプトはどうなりますか?
エラーメッセージを出すのに十分な早期の制御を得るには、どうすればよいでしょうか。 を終了してください。
例えば、ternery 演算子(2.5 の新機能)や "with" ブロックを使用するプログラムがあります。 (2.6の新機能)。 インタプリタのバージョン管理は スクリプトが最初に実行するチェッカールーチンです。 を呼び出す......ただし、そこまではしない。そのかわり スクリプトは、私のルーチンの前に、Pythonのコンパイル時に失敗します。 は呼び出されることすらありません。そのため、このスクリプトのユーザは、次のようなものを見ることになります。 不明瞭なsynaxエラーのトレースバック - これはかなり必要です。 専門家であれば、単純に実行したケースであると推論することができます。 Pythonのバージョンを間違えているのです。
Pythonのバージョンを確認する方法は知っています。問題は、古いバージョンのPythonでは不正な構文があることです。このプログラムを考えてみましょう。
import sys
if sys.version_info < (2, 4):
raise "must use python 2.5 or greater"
else:
# syntax error in 2.4, ok in 2.5
x = 1 if True else 2
print x
2.4で実行すると、次のような結果になります。
$ ~/bin/python2.4 tern.py
must use python 2.5 or greater
であって、この結果ではありません。
$ ~/bin/python2.4 tern.py
File "tern.py", line 5
x = 1 if True else 2
^
SyntaxError: invalid syntax
(同僚へのチャネリング)
解決方法は?
を使用してテストすることができます。
eval
:
try:
eval("1 if True else 2")
except SyntaxError:
# doesn't have ternary
また
with
は
Python 2.5で利用できるのは、単に
from __future__ import with_statement
.
EDIT: 十分に早い段階で制御を得るために、異なる
.py
ファイルを作成し、インポートする前にメインファイルで互換性をチェックします(例.
__init__.py
をパッケージの中に入れてください)。
# __init__.py
# Check compatibility
try:
eval("1 if True else 2")
except SyntaxError:
raise ImportError("requires ternary support")
# import from another module
from impl import *
関連
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] Pythonスクリプトのプロファイリングはどのように行うのですか?
-
[解決済み] スクリプトを実行しているPythonのバージョンを確認するにはどうしたらいいですか?
-
[解決済み] NaN値をチェックするにはどうすればよいですか?
-
[解決済み] Pythonでファイルサイズを確認するには?
-
[解決済み] Pythonモジュールのバージョンを確認する方法は?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
Python Decorator 練習問題
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み] データ型が理解できない
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み] スクリプトを実行しているPythonのバージョンを確認するにはどうしたらいいですか?
-
[解決済み】実行時にPythonのバージョンを検出するにはどうすればいいですか?[重複しています]。