SORU
23 Aralık 2008, Salı


Python zarif gelecekteki özelliği (____gelecek) ithalat

Nasıl incelikle başarısız gelecekteki özelliği ithalat ne yapmalıyım? Eğer bir kullanıcı çalışıyorsa Python 2.5 kullanarak ve benim modülde ilk ifadesidir:

from __future__ import print_function

Python 2.5 için bu modül derleme başarısız olur:

  File "__init__.py", line 1
    from __future__ import print_function
SyntaxError: future feature print_function is not defined

Python ^ programını yeniden çalıştırmanız için gereken kullanıcı bilgilendirmek istiyorum . = 2.6 ve belki de bunu yapmak için bazı yönergeler sağlar. Ancak, PEP 236 alıntı için:

Önce görünen tek satır bir future_statement

  • Modül kütüphane (varsa).
  • Yorum.
  • Boş satır.
  • Diğer future_statements.

Bir şey gibi yapamam ki:

import __future__

if hasattr(__future__, 'print_function'):
    from __future__ import print_function
else:
    raise ImportError('Python >= 2.6 is required')

Verir çünkü

  File "__init__.py", line 4
    from __future__ import print_function
SyntaxError: from __future__ imports must occur at the beginning of the file

KEP bu Pasajı içi ne umut vermek gibi görünüyor:

S: future_statements sarmak istiyorum kullanabilirim yani blok hariç/, deneyin hangi bağlı olarak farklı kod sürüm Python koşuyorum. Neden miyim?

Bir: Üzgünüm! /dışında bir çalışma olduğunu deneyin ; future_statements özelliği vardır öncelikle derleme zamanı hile ve hariç/deneyin uzun süre sonra olur derleyici yapılır. O, tarafından. hariç/çalışmayın zaman, semantik modül için zaten bir etkisi vardır anlaşma yapıldı. Try/except beri başarmak ne olmazgörünüyor başarmak olması gerektiği gibi, sadece. İzin Verilmiyor. Biz de tutmak istiyorum bu özel tablolar için çok kolay tanımak ve bulmak için.

Unutmayınolabiliral __future__ doğrudan ve bilgileri kullanın bu, sys ile birlikte.version_info, gittiğini anlamaya ilgili standları altında çalışan bir özellik durumu göz önüne alındığında.

Fikirler?

CEVAP
23 Aralık 2008, Salı


"Python ^ programını yeniden çalıştırmanız için gereken kullanıcı bilgilendirmek istiyorum . = 2.6 ve belki de bunu yapmak için bazı yönergeler sağlar."

Bir README dosyası ne değildir?

İşte alternatif. "": Hedef SOP çalıştırmadan önce çevreyi kontrol eden Python küçük bir damla. sarıcı bir

Dosya: appwrapper.py

import sys
major, minor, micro, releaselevel, serial = sys.version_info
if (major,minor) <= (2,5):
    # provide advice on getting version 2.6 or higher.
    sys.exit(2)
import app
app.main()

Ne "alma" anlamına gelir. direkt __future__ içeriğini inceleyebilirsiniz. Hala bir from __future__ import print_function derleyici için bir bilgi olmadığı gerçeği ile bağlı değilsin, ama asıl iş yapan modül almadan önce kurcalamak.

import __future__, sys
if hasattr(__future__, 'print_function'): 
    # Could also check sys.version_info >= __future__. print_function.optional
    import app
    app.main()
else:
    print "instructions for upgrading"

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FamilyFeud

    FamilyFeud

    22 AĞUSTOS 2006
  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006
  • TheForgottenGamer1

    TheForgotten

    28 AĞUSTOS 2009