Python 2 ve Python 3 farklılık

Bu konuda, Düzenleme ve Otomasyon uygulaması için geçerli olduğu için Python 2 ve 3 arasındaki fark ele alınmıştır.

Python 2 ve Python 3 arasındaki farklar Python belgelerinde ayrıntılı olarak ele alınmaktadır. Örneğin, Python 3.0konusuna bakın. Ayrıca, Düzenleme ve Otomasyonbağlamında geçerli olan farklılıkları da bilmeniz gerekir.

Modüller içe aktarılıyor

Komut dosyaları özelliği, bir komut dosyası yazarken Python modüllerini içe aktarmanızı sağlar. Dil alanı Python 2 olarak ayarlanırsa, yalnızca java.util.Date ve re modüllerini içe aktarabilirsiniz. Python 3 olarak ayarlanırsa, aşağıdaki modülleri içe aktarabilirsiniz:
  • dizi
  • base64
  • bs4
  • Takvim
  • kaynak grupları
  • datetime ( Python 2 java.util.Date modülüne eşdeğer)
  • e-posta
  • sıralı değer
  • hashlib
  • html
  • html2text
  • json
  • rasgele
  • RE
  • düzenli ifade
  • string
  • zamanlı
  • xml
Ayrıca, Python 3 komut dosyası için aşağıdaki Python yerleşik dosyaları kullanılabilir:
  • all ()
  • herhangi ()
  • bytearray ()
  • byte ()
  • classmethod
  • staticmethod
  • type ()

Hata tipleri

Python 3 uygulaması iki yeni hata tipi sunar:
  • ResilientSecurityBir komut dosyası güvenlik kısıtlamalarını ihlal etmeye çalışırsa kural dışı durum oluşur.
  • ResilientMemoryLimitException (Komut dosyası izin verilen RAM miktarı üst sınırından daha fazla ayırmayı denerse), komut dosyası için hata ortaya çıkar (64MB).

'from' anahtar sözcüğü

Python 3 'teki from anahtar sözcüğü, eposta iletisi bağlam nesnesindeki from özniteliğiyle çakışıyor. Bu nedenle, Python 3 komut dosyalarında emailmessage.from kullanımı desteklenmez ve emailmessage.senderile değiştirilmelidir. Python 2, emailmessage.from' yi hala destekliyor.

Var olmayan alanlar

Python 2 'de, var olmayan bir bağlam nesnesi özniteliğine erişme girişimi başarılı olur ve Nonedöndürür. Ancak Python 3 'te aynı işlem, alan adının geçersiz olduğunu belirten bir öznitelik hatası verir. Bu davranış, standart Python 3 ile aynı hizada. hasattr() yöntemi, bir özniteliğin var olup olmadığını denetlemek için kullanılabilir. Örneğin:
if hasattr(incident, 'nonExistentField'):
  log.info(incident.nonExistentField)
else:
  log.info('Tried to access a field that does not exist')
Komut dosyası şu günlük iletisini döndürür:
INFO: Cannot access a field that does not exist.

Unicode desteği

Python 3, kutudan çıkan Unicode 'u destekler. Bu, artık bir dizgiyi Unicode olarak saklamak için u önekini ya da unicode () işlevini belirtik olarak kullanmanız gerekmediği anlamına gelir. Var olan komut dosyalarını Python 2 'den Python 3 'e dönüştürürseniz, Python 3 'te Unicode ile ilgili hataları önlemek için bu öğeleri denetlemeniz ve kaldırmanız gerekir. Daha fazla bilgi için Python 3 belgelerine https://docs.python.org/3.6/howto/unicode.htmlbakın.

Metin nesnesi veri tipi

Metin nesnesi veri tipleri Python 2 ve Python 3 'te farklı davranır. Bu farklılıklar, Python 2 'den 3 'e dönüştürülen komut dosyalarını mutlaka kırmaz, ancak ilginizi çekebilir.
  • Python 3 'te, ister basit bir dizgi, ister yardımcı bir işlev kullanarak bir metin alanı alanının değerini ayarlasın, değer TextObjectolarak saklanır. Python 2 'de, basit bir dizgi kullanarak bir metin alanı alanının değerini ayarlarsanız, değer Unicode nesnesi olarak saklanır. Bu değeri bir yardımcı işlev kullanarak ayarlarsanız, değer SimpleTextContentDTOolarak saklanır.
  • Python 3 'te, TextObject tipindeki nesneler için varsayılan biçim 'html' dir. Biçim 'text' olarak ayarlanabilmesini sağlamak için, alan değeri helper.createPlainText()çağrılarak ayarlanmalıdır. Python 2 'de, SimpleTextContentDTO tipindeki nesnelerin biçimi, değeri ayarlamak için çağrılan yardımcıya bağlı olarak TEXT ya da HTML olabilir.
Python sürümlerindeki farklılıkları, aşağıdaki komut dosyasını çalıştırarak ve günlük iletilerini denetleyerek keşfedebilirsiniz:
incident.description = 'set direct'
log.info(type(incident.description)) 

incident.description = helper.createPlainText('set using createPlainText helper') 
log.info(type(incident.description)) 

incident.description = helper.createRichText('set using createRichText helper') 
log.info(type(incident.description))