2011-08-28 15 views

cevap

24

Hayır ve evet.

official Python 2.7.2 grammar'a göre, from kelimesinin tek oluşumu import_from numaralı maddede yer almaktadır, bu nedenle hayır. Python 3.1.3 grammar yılında

raise_stmt: 'raise' [test ['from' test]] 

görünen yeni fıkra, yani evet.

12

Python 2.x'te, from'un yalnızca kullanımı from x import y ifadesi içindir. Ancak, Python 3.x için, bu raise açıklamada, örneğin birlikte kullanılabilir:

try: 
    raise Exception("test") 
except Exception as e: 
    raise Exception("another exception") from e 
+0

Bu tam olarak ne yapar? Orijinal istisna bir şekilde örtülü bir şekilde zincirlenmiş mi? Bu bana Pythonic görünmüyor; açıkça bir yapıcı parametresi olarak almak için daha iyi ... bu yüzden kesinlikle başka bir şey yapar? –

+0

Şahsen hiç kullanmadım - Sadece var olduğunu biliyorum, ve doğrudan başka bir sebepten kaynaklanan bir istisnayı yükseltmek için tasarlanmıştır. – rfw

3

aşağıdaki kullanım

from __future__ import some_feature 

bir ithalat beyanı, söz dizimi ama yerine ithal modül, some_feature değerine bağlı olarak yorumlayıcı davranışını bir şekilde değiştirir. Örneğin

, from __future__ import with_statementwith açıklamada Python 2.6 kadar dile eklenmedi halde sen Python 2.5 Python'un with deyimini kullanmasını sağlar. Kaynak dosyalarının ayrıştırılmasını değiştirdiğinden, kaynak dosyanın başında herhangi bir __future__ içe aktarması görünmelidir.

Daha fazla bilgi için __future__ statement documentation'a bakın.

onlar mevcuttur mümkün __future__ ithalat listesi ve Python sürümleri için __future__ module documentation bakınız.

+1

Bunu başka bir sorunun cevabı olarak mı göndermek istediniz? Sadece tangentially bununla ilgili gibi görünüyor ... –

+0

Aslında, '__future__' modülünden de ithal ediyor. –

+2

@Karl: Hayır, yapmadım. Evet, '__future__' bir modüldür ve' __future__''dan içe aktarma bir import deyimidir. Ama benim amacım, gelecekten ithal etmenin sözdizimsel olarak diğer herhangi bir ithalat ile aynı olduğu zaman, * semantiğinin * bir vanilya ithalatından farklı olduğudur. Sadece diğer sembol isimlerini ithal etmek değil, aynı zamanda tercümanın davranışını da önemli ölçüde değiştiriyor. –