code --- Lớp cơ sở thông dịch viên¶
Source code: Lib/code.py
Mô-đun code cung cấp các phương tiện để triển khai các vòng lặp đọc-đánh giá-in trong Python. Hai lớp và chức năng tiện lợi được bao gồm có thể được sử dụng để xây dựng các ứng dụng cung cấp lời nhắc thông dịch tương tác.
- class code.InteractiveInterpreter(locals=None)¶
Lớp này xử lý trạng thái phân tích cú pháp và trình thông dịch (không gian tên của người dùng); nó không xử lý việc đệm đầu vào hoặc nhắc nhở hoặc đặt tên tệp đầu vào (tên tệp luôn được truyền rõ ràng). Đối số locals tùy chọn chỉ định ánh xạ để sử dụng làm không gian tên trong đó mã sẽ được thực thi; nó mặc định là một từ điển mới được tạo với khóa
'__name__'được đặt thành'__console__'và khóa'__doc__'được đặt thànhNone.Lưu ý rằng các đối tượng hàm và lớp được tạo trong phiên bản
InteractiveInterpretersẽ thuộc về không gian tên được chỉ định bởi locals. Chúng chỉ có thể được chọn nếu locals là không gian tên của mô-đun hiện có.
- class code.InteractiveConsole(locals=None, filename='<console>', local_exit=False)¶
Mô phỏng chặt chẽ hành vi của trình thông dịch Python tương tác. Lớp này được xây dựng trên
InteractiveInterpretervà thêm lời nhắc bằng cách sử dụngsys.ps1vàsys.ps2quen thuộc cũng như bộ đệm đầu vào. Nếu local_exit là đúng,exit()vàquit()trong bảng điều khiển sẽ không tăngSystemExitmà thay vào đó quay lại mã gọi.Thay đổi trong phiên bản 3.13: Đã thêm tham số local_exit.
- code.interact(banner=None, readfunc=None, local=None, exitmsg=None, local_exit=False)¶
Chức năng tiện lợi để chạy vòng lặp đọc-đánh giá-in. Điều này tạo ra một phiên bản mới của
InteractiveConsolevà đặt readfunc được sử dụng làm phương thứcInteractiveConsole.raw_input(), nếu được cung cấp. Nếu local được cung cấp, nó sẽ được chuyển tới hàm tạoInteractiveConsoleđể sử dụng làm vùng tên mặc định cho vòng lặp trình thông dịch. Nếu local_exit được cung cấp, nó sẽ được chuyển tới hàm tạoInteractiveConsole. Sau đó, phương thứcinteract()của phiên bản sẽ được chạy với banner và exitmsg được chuyển dưới dạng biểu ngữ và thông báo thoát để sử dụng, nếu được cung cấp. Đối tượng console sẽ bị loại bỏ sau khi sử dụng.Thay đổi trong phiên bản 3.6: Đã thêm tham số exitmsg.
Thay đổi trong phiên bản 3.13: Đã thêm tham số local_exit.
- code.compile_command(source, filename='<input>', symbol='single')¶
Hàm này hữu ích cho các chương trình muốn mô phỏng vòng lặp chính của trình thông dịch Python (còn gọi là vòng lặp đọc-eval-print). Phần khó khăn là xác định khi nào người dùng đã nhập một lệnh chưa hoàn chỉnh, lệnh này có thể được hoàn thành bằng cách nhập thêm văn bản (trái ngược với lệnh hoàn chỉnh hoặc lỗi cú pháp). Hàm almost này luôn đưa ra quyết định giống như vòng lặp chính của trình thông dịch thực.
source là chuỗi nguồn; filename là tên tệp tùy chọn mà nguồn được đọc, mặc định là
'<input>'; và symbol là ký hiệu bắt đầu ngữ pháp tùy chọn, phải là'single'(mặc định),'eval'hoặc'exec'.Trả về một đối tượng mã (giống như
compile(source, filename, symbol)) nếu lệnh hoàn chỉnh và hợp lệ;Nonenếu lệnh không đầy đủ; tăngSyntaxErrornếu lệnh hoàn tất và có lỗi cú pháp hoặc tăngOverflowErrorhoặcValueErrornếu lệnh chứa chữ không hợp lệ.
Đối tượng phiên dịch tương tác¶
- InteractiveInterpreter.runsource(source, filename='<input>', symbol='single')¶
Biên dịch và chạy một số nguồn trong trình thông dịch. Các đối số giống như đối với
compile_command(); mặc định cho filename là'<input>'và cho symbol là'single'. Một trong nhiều điều có thể xảy ra:Đầu vào không chính xác;
compile_command()đưa ra một ngoại lệ (SyntaxErrorhoặcOverflowError). Truy nguyên cú pháp sẽ được in bằng cách gọi phương thứcshowsyntaxerror().runsource()trả vềFalse.Dữ liệu đầu vào chưa đầy đủ và cần phải nhập thêm;
compile_command()trả vềNone.runsource()trả vềTrue.Việc nhập liệu đã hoàn tất;
compile_command()trả về một đối tượng mã. Mã được thực thi bằng cách gọiruncode()(cũng xử lý các ngoại lệ trong thời gian chạy, ngoại trừSystemExit).runsource()trả vềFalse.
Giá trị trả về có thể được sử dụng để quyết định nên sử dụng
sys.ps1haysys.ps2để nhắc dòng tiếp theo.
- InteractiveInterpreter.runcode(code)¶
Thực thi một đối tượng mã. Khi một ngoại lệ xảy ra,
showtraceback()được gọi để hiển thị dấu vết. Tất cả các ngoại lệ đều bị bắt ngoại trừSystemExit, được phép phổ biến.Lưu ý về
KeyboardInterrupt: ngoại lệ này có thể xảy ra ở nơi khác trong mã này và không phải lúc nào cũng có thể phát hiện được. Người gọi nên chuẩn bị để đối phó với nó.
- InteractiveInterpreter.showsyntaxerror(filename=None)¶
Hiển thị lỗi cú pháp vừa xảy ra. Điều này không hiển thị dấu vết ngăn xếp vì không có lỗi cú pháp. Nếu filename được cung cấp, nó sẽ được đưa vào ngoại lệ thay vì tên tệp mặc định do trình phân tích cú pháp của Python cung cấp, vì nó luôn sử dụng
'<string>'khi đọc từ một chuỗi. Đầu ra được viết bằng phương phápwrite().
- InteractiveInterpreter.showtraceback()¶
Hiển thị ngoại lệ vừa xảy ra. Chúng tôi xóa mục ngăn xếp đầu tiên vì nó nằm trong quá trình triển khai đối tượng trình thông dịch. Đầu ra được viết bằng phương pháp
write().Thay đổi trong phiên bản 3.5: Truy nguyên chuỗi đầy đủ được hiển thị thay vì chỉ truy nguyên chính.
- InteractiveInterpreter.write(data)¶
Viết một chuỗi vào luồng lỗi tiêu chuẩn (
sys.stderr). Các lớp dẫn xuất nên ghi đè lên điều này để cung cấp khả năng xử lý đầu ra phù hợp khi cần.
Đối tượng bảng điều khiển tương tác¶
Lớp InteractiveConsole là lớp con của InteractiveInterpreter và do đó cung cấp tất cả các phương thức của đối tượng trình thông dịch cũng như các tính năng bổ sung sau.
- InteractiveConsole.interact(banner=None, exitmsg=None)¶
Mô phỏng chặt chẽ bảng điều khiển Python tương tác. Đối số banner tùy chọn chỉ định biểu ngữ sẽ in trước lần tương tác đầu tiên; theo mặc định, nó in một biểu ngữ tương tự như biểu ngữ được trình thông dịch Python tiêu chuẩn in, theo sau là tên lớp của đối tượng console trong ngoặc đơn (để không nhầm lẫn điều này với trình thông dịch thực sự - vì nó rất gần!).
Đối số exitmsg tùy chọn chỉ định thông báo thoát được in khi thoát. Truyền chuỗi trống để chặn thông báo thoát. Nếu exitmsg không được cung cấp hoặc
None, một thông báo mặc định sẽ được in.Thay đổi trong phiên bản 3.4: Để ngăn việc in bất kỳ biểu ngữ nào, hãy chuyển một chuỗi trống.
Thay đổi trong phiên bản 3.6: In thông báo thoát khi thoát.
- InteractiveConsole.push(line)¶
Đẩy một dòng văn bản nguồn tới trình thông dịch. Dòng không được có dòng mới ở cuối; nó có thể có dòng mới nội bộ. Dòng này được thêm vào bộ đệm và phương thức
runsource()của trình thông dịch được gọi với nội dung được nối của bộ đệm làm nguồn. Nếu điều này cho thấy lệnh đã được thực thi hoặc không hợp lệ thì bộ đệm sẽ được đặt lại; nếu không, lệnh không đầy đủ và bộ đệm vẫn được giữ nguyên sau khi dòng được nối thêm. Giá trị trả về làTruenếu cần thêm đầu vào,Falsenếu dòng được xử lý theo cách nào đó (điều này giống nhưrunsource()).
- InteractiveConsole.resetbuffer()¶
Xóa mọi văn bản nguồn chưa được xử lý khỏi bộ đệm đầu vào.