Soru python 2 kodu: eğer python 3 ise sys.exit ()


Python 2'nin sadece bir parçasının büyük bir parçam var. Python 3'ü başlangıçta kontrol etmek ve python3 kullanıldığında çıkmaktır. Ben de denedim:

import sys

if sys.version_info >= (3,0):
    print("Sorry, requires Python 2.x, not Python 3.x")
    sys.exit(1)

print "Here comes a lot of pure Python 2.x stuff ..."
### a lot of python2 code, not just print statements follows

Ancak, çıkış gerçekleşmez. Çıktı:

$ python3 testing.py 
  File "testing.py", line 8
        print "Here comes a lot of pure Python 2.x stuff ..."
                                                        ^
SyntaxError: invalid syntax

Python gibi görünüyor bütün bir şey yürütmeden önce kod, ve dolayısıyla hata.

Kullanılmakta olan python3'ü kontrol etmek için python2 kodu için iyi bir yol var mıdır?


32
2018-06-30 21:14


Menşei




Cevaplar:


Python, yürütmeye başlamadan önce kaynak dosyanızı derhal derler. Bütün dosya en azından olmalı ayrıştırmak Doğru, aksi takdirde bir SyntaxError.

Sorununuz için en kolay çözüm, her ikisi de Python 2.x ve 3.x olarak ayrılan küçük bir sarıcı yazmaktır. Örnek:

import sys
if sys.version_info >= (3, 0):
    sys.stdout.write("Sorry, requires Python 2.x, not Python 3.x\n")
    sys.exit(1)

import the_real_thing
if __name__ == "__main__":
    the_real_thing.main()

İfade import the_real_thing sadece idam edilecek sonra  if deyim, bu nedenle bu modüldeki kod Python 3.x kodu olarak ayrıştırmak için gerekli değildir.


54
2018-06-30 21:20



Ayrıca bir if __name__ == "foo" blok gibi çalışan if __name__ == "__main__" ama ne zaman çalışır foo içe aktarıldı - inspectorG4dget
Daha fazla düşünülmez miydi pythonic EAFP'yi kullanmak ve sadece içerideki try blok? - martineau
@martineau: Bunu eldeki durumda yapmayacağım. import çok başarılı olabilir ve diğer hatalar olabilir main(). Sen kapatmak istemiyorsun the_real_thing.main()  denemek / hariç. - Sven Marnach
@ inspectorG4dget: Yorumunuzu almıyorum ama ekledim if __name__ == "__main__": Tamamlamak için. - Sven Marnach
@SvenMarnach, işe yarıyor! Teşekkür ederim. - user1492917