2017-07-18 3 views
1

J'utilise le module six dans mon programme, et le code est le suivant:Interrogation sur l'utilisation de Python - Six modules

if six.PY2: 
    do_something() 
else: 
    do_something_else() 

Le problème avec cette approche est que, la fonction do_something_else() ne fonctionnait que si La version de Python est 3.4+ en raison des dépendances. (Et pas sur Py 3.3)

Comment puis-je vérifier cela?

Merci beaucoup! :)

+0

Demandez-vous comment vérifier si Python est une version 3.4 ou plus? – jwodder

+1

Oui. Je suis curieux de savoir s'il est possible de vérifier la même chose en utilisant Six. –

+0

Si vous êtes concerné par différentes dépendances pour v.2 vs. 3 - considérez que '' '' import''' peut être placé sous la clause if/else. if condition: importe quelque chose/else: importe something_other – ddbug

Répondre

2

Comme il est une exigence commune, six fournit déjà celui-ci:

six.PY34 

Il sera vrai si la version Python est supérieure ou égale à v3.4.

Vous pouvez faire ceci:

if six.PY2: 
    do_something() 
elif six.PY34: 
    do_something_else() 
else: 
    # ...do what? 
+0

On dirait qu'ils ont abandonné le schéma à deux chiffres depuis 3.4. J'ai v3.6, et six.PY34 est vrai, mais PY35 et PY36 sont indéfinis et lancent AttributeError. Ainsi, par exemple, on ne peut pas tester de cette façon si F "..." chaînes sont disponibles. – ddbug

+0

@ddbug Vous ne pouvez pas tester si la chaîne f est disponible, car il s'agira d'une erreur de syntaxe au moment * import *. Donc, votre exemple n'est pas bon. – wim

+0

Je ne comprends pas pourquoi vous avez mentionné '' '' '' import''' ici, mais oui, les deux chemins if et else doivent être compris par la version actuelle du compilateur, au moment de la compilation. Étant donné que la syntaxe des instructions d'importation est essentiellement la même dans v2 et 3, l'importation de différentes choses pour v2 et 3 fonctionnera, les instructions d'importation sont exécutées en cours d'exécution. – ddbug

1

Vous pouvez obtenir le numéro de version actuel sous la forme d'un numéro de sys.version_info. Alors:

if sys.version_info >= (3, 4): 
    ... 
+1

Et puis vous utilisez l'ordre lexicographique des tuples: 'sys.version_info> = (3, 4)' – wim