Bạn có thể chạy mã Python 2 trong Python 3 không?

Tôi đang cố gắng đưa một số mã Python 2 vào Python 3 nhưng gặp sự cố khi quy trình hoạt động chính xác. Từ ArcGIS Pro, tôi đang chạy một công cụ GP tùy chỉnh với đoạn mã sau làm tập lệnh của nó. Mục tiêu của tôi là chạy mã Python 2 [được lưu trữ trong một tập lệnh riêng] dựa trên một loạt MXD để liệt kê nguồn dữ liệu cho từng lớp hoặc bảng. Trong trường hợp của tôi, làm theo cách này không mang lại kết quả. Mã chạy trong khoảng 2 giây rồi chấm dứt. Bất kỳ ý tưởng?

KỊCH BẢN PYTHON 3 [WAPPER]

nhập quy trình con, os, winreg, sys, arcpy

thử.
   arcpy. AddMessage["Tìm Python 2. 7 thư mục cài đặt. "]
   hKey = winreg. OpenKey [winreg. HKEY_LOCAL_MACHINE,    "SOFTWARE\\WOW6432Node\\Python\\PythonCore\\2. 7\\InstallPath"]
   result = winreg. QueryValueEx[hKey, ""][0]
ngoại trừ.
   arcpy. AddWarning["Trăn 2. 7 không tìm thấy thư mục cài đặt. "]
   arcpy. AddError["Tập lệnh thất bại. "]
   sys. thoát[]

nếu hệ điều hành. con đường. tồn tại [kết quả + "\\python. exe"].
   arcpy. AddMessage["Khởi chạy Python 2. 7 thực thi. "]
   CREATE_NO_WINDOW = 0x8000000
    process = sub process. Popen[[kết quả + "\\python. exe", "C. \\temp\\python\\ListMXDDataSources. py"],    stdout=quy trình con. PIPE, stderr=quy trình con. PIPE, Creationflags = CREATE_NO_WINDOW, shell=True, stdin=None]
   stdout, stderr = process. giao tiếp[]
   arcpy. Thêm tin nhắn['{}'. định dạng [thiết bị xuất chuẩn. decode["utf-8"]]]
   arcpy. AddWarning['{}'. định dạng [stderr. giải mã ["utf-8"]]]

KỊCH BẢN PYTHON 2

nhập arcpy, toàn cầu

rootDirectory = 'C. /temp'
fileExtension = '. mxd'

def main[].
   cho f trên toàn cầu. toàn cầu [rootDirectory + '/*' + fileExtension].
      mxd = arcpy. lập bản đồ. MapDocument[f]
      cho df trong arcpy. lập bản đồ. ListDataFrames[mxd, ''].
         cho lyr trong arcpy. lập bản đồ. ListLayers[mxd, '', df].
             nếu không lyr. isGroupLayer.
               if lyr. làRasterLayer.
                  print "Lớp quét, {}". định dạng[lyr]
               elif lyr. isFeatureLayer.
                  print "Lớp đối tượng, {}, {}". định dạng [lyr, lyr. serviceProperties]
               else.
                  print "Layer, {}". định dạng[lyr]
          cho tbl trong arcpy. lập bản đồ. ListTableViews[mxd, '', df].
            in "Bảng, {}". định dạng [tbl. nguồn dữ liệu]

if __name__ == '__main__'.
   main[]

Việc chọn sử dụng bộ xử lý Python 2 hoặc Python 3 được thực hiện tùy theo từng trường hợp. Trong trường hợp có thể sử dụng mặc định, chẳng hạn như trong cú pháp lệnh, thì mặc định là sử dụng bộ xử lý Python 2. Trong mọi trường hợp, bạn có thể chỉ định rõ ràng để sử dụng bộ xử lý Python 3

tôi thích Python;

Đó là một sai lầm khi không triển khai cả Python 2 và Python 3 trong một tệp thực thi CPython duy nhất

Về nhiều mặt, Python 3 là một cải tiến so với Python 2, nhưng thật sai lầm khi không triển khai cả Python 2 và Python 3 trong một tệp thực thi duy nhất được hầu hết mọi người sử dụng rộng rãi [CPython]. Lỗi này khiến việc chuyển đổi từ triển khai Python 2 sang Python 3 trở nên rất khó khăn. Nếu chương trình của bạn nhỏ và không sử dụng bất kỳ thư viện nào, việc chuyển đổi có xu hướng dễ dàng; . Nhưng đó là một trường hợp đặc biệt kỳ lạ, bởi vì Python phổ biến và đã tạo ra một số lượng lớn thư viện. Hầu hết các chương trình Python phụ thuộc vào thư viện, cái này phụ thuộc vào thư viện khác, cái này phụ thuộc vào thư viện khác [bạn hiểu rồi đấy]. Nếu bất kỳ thư viện nào ở bất kỳ đâu không hỗ trợ Python 3, thì không có gì khác phụ thuộc vào nó cũng có thể sử dụng Python 3. Vì vậy, điều đó có nghĩa là mọi thư viện mà bạn phụ thuộc vào [theo chiều ngang. ] phải đồng thời chuyển sang hỗ trợ Python 3 nếu muốn sử dụng Python 3. Bạn cũng phải dịch toàn bộ chương trình của mình sang Python 3 cùng một lúc;

Do tắc nghẽn thư viện và sự không tương thích cơ bản giữa Python 2 và Python 3, việc sử dụng Python 3 bị chậm. Các nhà phân phối Linux cảm thấy khó khăn khi hỗ trợ Python 3 vì điều này [xem chuỗi Fedora này và trang Fedora Python3 F13]

Vào 2014-04-13 Guido van Rossum đã phải thêm 5 năm nữa cho Python 2. 7 ngày hết hạn [đến năm 2020] và trong các nhận xét đã thừa nhận rằng nhiều người dùng "chưa thể chuyển sang Python 3". Ngay cả cơ sở hạ tầng hỗ trợ Python cũng không thể chuyển sang Python 3. Mercurial, một chương trình phổ biến được viết bằng Python, đã cố gắng chuyển sang Python 3 hai lần và đã từ bỏ nỗ lực này vì xác định rằng sẽ tốn thêm một năm nỗ lực để thực hiện chuyển đổi. Trong trường hợp bạn bỏ lỡ điều trớ trêu, các nhà phát triển Python đã đồng ý chuyển quá trình phát triển Python sang đồng bóng [theo PEP 385], hầu hết Python. kho lưu trữ org hiện đã chuyển từ Python. org subversion repo vào Python. kho lưu trữ đồng bóng org. Vì vậy, Python. org đang sử dụng một công cụ trong Python để phát triển Python 3 mà chính nó đã từ bỏ việc chuyển sang Python 3. vì quá trình chuyển đổi sang Python 3 quá khó khăn

Python Wall of Superpowers [trước đây là Python Wall of Shame] cho thấy nhiều thư viện hỗ trợ Python 3, nhưng hãy nhớ rằng, nếu 99% thư viện Python 2 của bạn cũng hỗ trợ Python 3, thì bạn không thể sử dụng Python 3 và phải sử dụng Python 2. Một số thư viện [chẳng hạn như Twisted, Zope2 và meld3] đã tuyên bố rằng họ sẽ không bao giờ hỗ trợ Python 3. Thông qua nỗ lực to lớn, một số thư viện và chương trình hiện đã hoạt động trên Python 3. Nhưng kể từ năm 2014, mọi nhà phát triển mà tôi biết sử dụng Python đều sử dụng Python 2, không bao giờ Python 3 [và Python 3. 0 được phát hành vào tháng 12 năm 2008. ]

Tôi nghĩ rằng đó là một sai lầm khủng khiếp khi kết hợp việc thay đổi ngôn ngữ lập trình với việc chuyển sang một triển khai C khác. Hoàn toàn có thể có một tệp thực thi "python" duy nhất thực hiện cả ngữ nghĩa phiên bản 2 và phiên bản 3 để cho phép trộn các ký hiệu khác nhau. Sau đó, bất kỳ chương trình nào cũng có thể được viết với ngữ nghĩa của phiên bản 3, nhưng vẫn gọi các thư viện được viết với ngữ nghĩa của phiên bản 2. Có một lý do mà mọi người không thích những thay đổi không tương thích ngược;

Các danh sách gửi thư đôi khi nói về "cà rốt" để sử dụng Python 3, nhưng tôi nghĩ điều đó còn thiếu điểm. Vấn đề không phải là thiếu cà rốt. Vấn đề là mìn, dây thép gai và súng bắn vào bạn nếu bạn cố gắng chuyển mã Python 2 hiện có sang triển khai Python 3. Quá trình chuyển đổi bị hỏng, không phải đích đến

Quá trình chuyển đổi bị hỏng, không phải đích đến

Trong nhiều trường hợp, sẽ tốt hơn nếu chúng ta viết các chương trình Python hoạt động mà không thay đổi trên cả Python 2 và Python 3 [trong đó "Python 3" thực sự có nghĩa là phiên bản 3. 3 trở lên]. Sau đó, chúng ta không cần phải loay hoay với 2to3 [hoặc 3to2] và những điều vô nghĩa khác. Cách tiếp cận này được gọi là Python tương thích chuyển tiếp

Trăn 2. 6 bao gồm nhiều khả năng giúp viết mã hoạt động trên cả 2 dễ dàng hơn. 6 và 3. Do đó, bạn có thể lập trình bằng Python 2 nhưng sử dụng một số tiện ích mở rộng Python 3 nhất định. và mã kết quả hoạt động trên cả hai. Trăn 2. 6 đã ra mắt được một thời gian, vì vậy đối với nhiều người, yêu cầu 2. 6 là điều kiện tiên quyết hợp lý. [Một số người có thể ủy thác phiên bản 2. 7, điều này thậm chí còn dễ dàng hơn. ] Chỗ nào khó quá thì viết bằng Python 2. 6+, nhưng thêm một số điểm hay về cú pháp và ngữ nghĩa của Python 3. Mark Summerfield có một bản tóm tắt hay về sự khác biệt của thành ngữ Python 2 và 3

Mặc dù đã mất 5 năm, nhưng có vẻ như các nhà phát triển Python cuối cùng cũng bắt đầu nhìn thấy ánh sáng và tiến gần hơn đến vị trí của tôi. Vào năm 2014, Guido van Rossum đã tóm tắt hội nghị PyCon, ". Tôi thực sự nghĩ rằng chúng ta nên làm mọi thứ tốt hơn cho những người phải sử dụng Python 2 và 3 trong một cơ sở mã duy nhất, bằng cách phát triển nhiều công cụ hơn và bằng các bản cập nhật bảo mật và có thể là trình cài đặt cho 2. 7 [PEP 466]. Một số gợi ý đã được thực hiện. Hỗ trợ tài chính của PSF để phát triển và/hoặc chuyển công cụ. các trình sửa lỗi 2to3 bổ sung để giúp chuyển đổi mã chỉ dành cho Python-2 thành mã nguồn đơn Python-2 và 3, một kẻ nói dối riêng, một sumo 2. 7 bao gồm tất cả các gói backported-from-Python-3-stdlib đã biết,. Cách được đề xuất và ít gây đau đớn nhất để phát triển cho Python 2 và 3 chắc chắn là sử dụng một nguồn duy nhất chạy dưới cả hai mà không cần dịch; . "

Một cách đơn giản để làm điều này là sử dụng Python 2. 6+ để phát triển và bắt đầu từng Python của bạn. py với các tệp sau

  from __future__ import print_function, unicode_literals
  from __future__ import absolute_import, division

Chúng chuyển sang ý nghĩa Python 3 cho các cấu trúc chính. Bây giờ bạn sử dụng print[. ] thay vì câu lệnh in, chuỗi unicode, nhập sẽ luôn là tuyệt đối và phép chia sẽ tạo giá trị dấu phẩy động khi cần [i. e. , 1/2 bây giờ trả về 0. 5]

Trăn 2. 6 bao gồm một số tính năng của Python 3 theo mặc định [như hỗ trợ cho "byte"], vì vậy bạn có thể sử dụng chúng trực tiếp. Trong một số trường hợp, bạn nên tránh sử dụng một số cấu trúc nhất định và thay thế chúng bằng một cấu trúc khác [tôi cảm ơn vì Chạy cùng mã trên Python 2. x và 3. x chỉ ra một số trong số này]. Ví dụ

thay vì sử dụng. has_key[k]k trong dd. itervalues[]d. giá trị[] có thể gọi được[o]hasattr[o, '__call__']

Một số cấu trúc mã yêu cầu thêm một chút công việc để làm cho chúng hoạt động theo cách tương tự trong Python 2 và Python 3. Ví dụ: "phạm vi" của Python 3 giống với "xrange" của Python 2. Chúng ta có thể làm điều này bằng cách chèn sau câu lệnh "từ __future__" như sau

  try:
     xrange = xrange
     # We have Python 2
  except:
     xrange = range
     # We have Python 3

Bây giờ chúng ta có thể sử dụng "xrange[. ]" trong phần còn lại của tệp và nó sẽ hoạt động bình thường. [Bạn có thể sử dụng trực tiếp "phạm vi []", nhưng trong Python 2, điều này có thể rất kém hiệu quả. ]

Bạn cũng có thể nhập các gói và đổi tên chúng. Tuy nhiên, thay vì cố gắng tự làm tất cả những điều này, hãy thử sử dụng mô-đun "sáu". Sáu mô-đun đóng gói nhiều điểm khác biệt trong Python2/3 này và giúp dễ dàng "nhập bất kỳ thư viện nào tôi cần"

Bạn có thể sử dụng cờ "-3" của python khi chạy Python 2 để cảnh báo bạn về mã sẽ không chuyển đổi rõ ràng sang Python 2. Sử dụng cờ đó và sửa những gì nó tìm thấy theo thời gian, là cách tiếp cận chuyển đổi hợp lý hơn nhiều so với việc cố gắng thay đổi mọi thứ đồng thời

Một trong những ưu điểm của Python là nó là một ngôn ngữ dễ đọc; . Có một câu hỏi triết học là liệu bạn viết bằng Python 2 [với một số sửa đổi] hay bằng Python 3 hoạt động trong Python 2. Ví dụ: bạn chọn sử dụng "xrange" hay "range" làm tên trong mã?

  • Tất cả các thư viện đều hoạt động trong Python 2, trong khi một số ít hoạt động trong Python 3. Vì vậy, trong thực tế, để làm cho các thư viện hoạt động, bạn thực sự đang làm việc trong Python 2, vì vậy bạn cũng có thể sử dụng ký hiệu của hệ thống như thực tế
  • Python 2 được biết đến nhiều hơn, vì vậy tài liệu [v.v.] có xu hướng tốt hơn
  • Công cụ "2to3" cố gắng dịch Python 2 sang Python 3 và ít nhất cũng có một số thành công. Công cụ "3to2" chưa hoàn thiện

Python 2 và Python 3 có một số giao diện thư viện khác nhau và việc cố gắng xử lý tất cả giao diện đó trong mỗi tệp có thể rất tệ

Viết mã hoạt động trong cả 2 và 3 có thể trở thành một nỗi đau nghiêm trọng, vì vậy khi quá khó, tôi bỏ nó và làm cho mã hoạt động trên Python 2 bổ sung một số tính năng của 3. Theo thời gian, tôi có thể sửa đổi mã để giống 3 hơn, giả sử rằng các phiên bản tương lai của Python 2 thêm ký hiệu từ Python 3. Điều này mang lại cho tôi một cách thiết thực để chuyển dần dần sang Python 3 và sau đó sử dụng 2to3 khi tất cả các thư viện đã thực hiện bước cuối cùng đó. Vào thời điểm đó, sự khác biệt về mã sẽ không đáng kể thay vì khoảng cách hiện tại

Một trong những thách thức lớn nhất là xử lý Unicode, vì Python 3 nghiêm ngặt hơn về Unicode so với Python 2. Nói chung, bạn muốn mã hóa thành Unicode khi bạn đọc dữ liệu và chỉ mã hóa lại thành byte khi bạn viết nó ra [đây được gọi là phương pháp "bánh sandwich Unicode"]. Xem bài thuyết trình của Unipain, e. g. , tại Pragmatic Unicode ~ hoặc ~ How Do I Stop the Pain?, để biết thêm thông tin. Một vấn đề khó chịu là cả Python 2 và Python 3 đều có một loại gọi là "str" ​​nhưng chúng hoàn toàn khác nhau; . Bạn có thể viết mã hoạt động trên cả hai, nhưng việc trộn tên gây nhầm lẫn

Vấn đề lớn nhất với cách tiếp cận Unicode của Python 3 là nó hoạt động tốt khi được cung cấp dữ liệu Unicode được mã hóa hoàn hảo và bạn luôn biết mã hóa này là gì. Âm thanh tuyệt vời, nhưng điều này hầu như không bao giờ đúng. Ví dụ: tên tệp Unix không phải là chuỗi, chúng là chuỗi byte có thể không phải là chuỗi ký tự hợp pháp. Các phiên bản sau của Python 3 đã đề cập đến trường hợp đơn giản này [xem PEP 383]. Bạn thường không biết mã hóa của đầu vào tiêu chuẩn là gì; . Trong các trường hợp khác, thường không có thông tin về mã hóa hoặc dữ liệu mã hóa bị sai [trường hợp sau đặc biệt phổ biến trong cài đặt CJK]. Dữ liệu thường có sự kết hợp không chuẩn của các mã hóa khác nhau, chẳng hạn như. g. , nhiều bộ dữ liệu "UTF-8" thực sự là hỗn hợp của 1252 [đặc biệt là dấu ngoặc kép] và UTF-8. Điều này có nghĩa là việc sử dụng bộ mã hóa hoặc sử dụng mã hóa bộ ký tự do tiêu đề phản hồi cung cấp thường không có giá trị. Armin Ronacher vào tháng 1 năm 2014 lập luận rằng "Cách xử lý Unicode của Python 2 dễ bị lỗi và tôi hoàn toàn ủng hộ việc cải thiện nó. [nhưng] Python 3 là một bước lùi và mang đến nhiều vấn đề hơn mà tôi cực kỳ ghét khi làm việc với nó. " Trong nhiều trường hợp, bạn có thể sử dụng lớp UnicodeDammit của BeautifulSoup để tìm ra cách mã hóa [lớp này cũng có toán tử "detwingle" để xử lý dữ liệu là UTF-8 nhưng cũng bao gồm các ký tự Windows-1252 để cuộn tròn/dấu ngoặc kép thông minh]. Một cuộc thảo luận về vấn đề khả năng đọc của python số 42 lưu ý rằng Unicode Dammit thường hoạt động, nhưng không hoạt động trên các trang tiếng Hàn [nơi mã hóa thường sai]

Pragmatic Unicode thảo luận các vấn đề về Unicode như sau. "Đây là Thực tế cuộc sống #4. Bạn không thể xác định mã hóa của chuỗi byte bằng cách kiểm tra nó. Bạn cần biết thông qua các phương tiện khác. Ví dụ: nhiều giao thức bao gồm các cách để chỉ định mã hóa. Ở đây chúng tôi có các ví dụ từ các tệp nguồn HTTP, HTML, XML và Python. Bạn cũng có thể biết mã hóa bằng cách sắp xếp trước, ví dụ: thông số kỹ thuật cho nguồn dữ liệu có thể chỉ định mã hóa. Có nhiều cách để đoán mã hóa byte, nhưng chúng chỉ là phỏng đoán. Cách duy nhất để chắc chắn về mã hóa là tìm ra nó theo một số cách khác. Thực Tế Cuộc Sống #5. Đôi khi bạn bị nói sai. Thật không may, vì mã hóa cho byte phải được giao tiếp riêng biệt với chính byte, nên đôi khi mã hóa được chỉ định bị sai. Ví dụ: bạn có thể kéo một trang HTML từ máy chủ web và tiêu đề HTTP xác nhận trang đó là 8859-1, nhưng trên thực tế, nó được mã hóa bằng UTF-8. " Đây có thể là sự thật của cuộc sống, nhưng thiết kế của Python 3 không thực sự hỗ trợ tốt cho những sự thật của cuộc sống này. đặc biệt là điểm #5. Thiết kế của Python 3 dường như cho rằng bạn luôn có thể biết mã hóa là gì, mặc dù thường không có cách nào để biết một cách chắc chắn mã hóa này thực sự là gì. Thật vậy, Pragmatic Unicode giả định rằng có dữ liệu sử dụng một số mã hóa tiêu chuẩn, mặc dù dữ liệu trong thế giới thực đôi khi là sự trộn lẫn của các mã hóa khác nhau. Armin Ronacher đã chỉ ra vào tháng 5 năm 2014 rằng những sự phức tạp này khiến việc tạo ra nhiều chương trình thực trong Python 3 khó hơn nhiều so với Python 2 [ngược lại với dự định]. Có thể làm việc với dữ liệu trong thế giới thực trong Python 3 bằng cách đọc các byte dữ liệu, sau đó kết hợp dữ liệu cùng với thông tin mã hóa đã xác nhận quyền sở hữu để suy ra mã hóa thực tế [và để xóa dữ liệu nếu nó không ở trong bất kỳ mã hóa hợp lệ nào . Lớp UnicodeDammit của BeautifulSoup cho thấy một cách hợp lý để [có khả năng] đạt được điều đó

Tôi hy vọng rằng việc triển khai Python 2 C sẽ tiếp tục được nâng cấp cho đến khi nó hỗ trợ gần như tất cả các tính năng của Python 3. Đặc biệt, tôi muốn xem "nhập __future__ python3", sẽ cố gắng làm cho nó giống python3 nhất có thể, bao gồm cả tên và giao diện Python 3 mới. Sau đó, các chương trình và thư viện có thể dễ dàng chuyển sang các tính năng của phiên bản 3 theo tốc độ của riêng chúng, thay vì yêu cầu "ngày gắn cờ". Điều đó cũng có nghĩa là mã có thể khá sạch

PEP 477 đã thêm ensurepip vào Python 2. 7. 9. Lý do chính là điều này giúp truy cập các mô-đun của bên thứ ba dễ dàng hơn để di chuyển từ Python 2 sang Python 3, bao gồm sáu, hiện đại hóa và tương lai

Tôi nghĩ rằng có thể người dùng Python cuối cùng sẽ kết thúc ở Python 3, nhưng các nhà phát triển Python đã làm một công việc tồi tệ trong việc xử lý quá trình chuyển đổi. Mong đợi mọi người chuyển đổi mã ngay lập tức, cả mã của riêng họ và tất cả các thư viện một cách chuyển tiếp, là một ý tưởng tồi tệ và không khả thi. Hy vọng rằng các nhà phát triển ngôn ngữ khác sẽ rút kinh nghiệm từ tình huống này và xử lý quá trình chuyển đổi một cách duyên dáng hơn

Rất nhiều trang khác có thông tin tương tự về cách làm cho mã hoạt động trực tiếp trên cả 2 và 3. Rất nhiều trong số chúng bao gồm làm điều này cho các phiên bản Python trước 2. 6, có xu hướng làm việc nhiều hơn. Bao gồm các

  • Chuyển Python thực tế cho các lập trình viên hệ thống của Peter A. Donis và Eric S. Raymond
  • Chuyển Mã Python 2 sang Python 3 thảo luận về các tùy chọn khác nhau và lưu ý rằng "Qua nhiều năm, cộng đồng Python đã phát hiện ra rằng cách dễ nhất để hỗ trợ song song cả Python 2 và 3 là viết mã Python hoạt động trong cả hai phiên bản. hỗ trợ đồng thời Python 2 & 3 thường là lựa chọn ưa thích của mọi người để họ có thể tiếp tục cải thiện mã và làm cho nó hoạt động cho hầu hết số lượng người dùng. " Nó lưu ý công cụ "hiện đại hóa", cố gắng chuyển đổi mã Python 2 thành mã hoạt động trên 2 hoặc 3. Nó cũng đề cập đến dự án "tương lai" nhập các đối tượng Python 3 vào Python 2 và cờ "-3" mà bạn có thể sử dụng trong Python 2 để cảnh báo về khả năng không tương thích với Python 3
  • Hỗ trợ Python 2 và 3 mà không cần chuyển đổi 2to3 nói về vấn đề này và đặc biệt thảo luận về cách sử dụng mô-đun "sáu" để trợ giúp
  • Python-future cung cấp "lớp tương thích còn thiếu giữa Python 3 và Python 2";
  • Chuyển tiếp Python tương thích cũng thảo luận về điều này. Điều này bắt đầu bằng cách nói, "Đối với các ứng dụng web, cách an toàn nhất hiện nay là gắn bó với Python 2. x ngay cả đối với các dự án mới [, vì] lý do đơn giản là hiện tại chúng tôi chưa có đủ thư viện hỗ trợ cho Python 3 và việc chuyển một số trong số chúng sang là một bước tiến lớn. "
  • Làm cho mã hoạt động trong python 2 và 3 có một số lưu ý thú vị
  • Python 3 Q & A thảo luận về lý do tại sao họ thực hiện các thay đổi cho Python 3. Vấn đề của tôi không nằm ở những thay đổi đó [tôi thích những thay đổi trong Python 3], đó là cách tiếp cận chuyển đổi cực kỳ khủng khiếp yêu cầu chuyển đổi ngày cờ toàn bộ hoặc không có gì [một ý tưởng tồi tệ]
  • Tạo mã chạy trên Python 2. 0 đến 3. 0 nói về việc làm cho mã chạy trên bất kỳ thứ gì từ 2. 0 trên
  • Chạy cùng mã trên Python 2. x và 3. x
  • "Bộ phận hỗ trợ Py3 giống như một người anh em họ thất nghiệp mà chúng tôi đang để rơi trên chiếc ghế dài. chúng tôi đã khó chịu vì nó ở đây, vì vậy nó không nên chất đống bát đĩa bẩn khắp nơi. " một bình luận lanh lợi về Python 3

Vui lòng xem trang chủ của tôi tại https. // người quay bánh xe. com. Bạn cũng có thể muốn xem bài báo của tôi Tại sao OSS/FS? . và cuốn sách của tôi về cách phát triển các chương trình an toàn

Bạn có thể chạy tập lệnh Python 2 trong Python 3 không?

Sau đó, bạn có thể chạy tập lệnh thông qua quy trình con từ python [giả sử bạn có cả Python 2. x và Python3. x] và nhận kết quả thông qua quy trình con hoặc mở tệp được tạo bởi tập lệnh Python 2.

Làm cách nào để chuyển đổi mã Python 2 sang Python 3?

Chúng tôi có thể chuyển đổi tập lệnh Python2 thành tập lệnh Python3 bằng cách sử dụng mô-đun 2to3 . Nó thay đổi cú pháp Python2 thành cú pháp Python3. Chúng tôi có thể thay đổi tất cả các tệp trong một thư mục cụ thể từ python2 thành python3.

Python 2 có tương thích ngược với Python 3 không?

Một trong những lý do chính khiến Python 2 vẫn rất phổ biến là vì nó tương thích ngược . Điều này có nghĩa là bạn có thể chạy mã Python 2 trên trình thông dịch Python 3 và ngược lại.

Chủ Đề