2012-06-04 25 views
79

Tôi muốn sao chép mã Python đã thụt vào/toàn bộ hàm và lớp vào IPython. Mỗi lần tôi cố gắng thụt đầu dòng là hơi say lên và tôi nhận được thông báo lỗi sau:Công cụ dán% phép thuật của IPython hoạt động như thế nào?

IndentationError: unindent does not match any outer indentation level (<ipython-input-23-354f8c8be51b>, line 12)

If you want to paste code into IPython, try the %paste and %cpaste magic functions.

+3

tôi biết, nó là có lẽ đã có trên stackoverflow, nhưng nó không tìm thấy nó sau 3 lần tìm kiếm, vì vậy tôi đã thêm phiên bản của riêng mình. – Framester

Trả lời

121

Bạn không thể sao chép vào IPython trực tiếp. Đây là các bước:

  1. Sao chép dòng bạn muốn sao chép vào IPython vào clipboard
  2. Nhập %paste vào IPython
  3. Nhấn Enter
  4. lợi nhuận!
+39

% dán đòi hỏi Tkinter mặc dù, vì vậy nếu bạn không có một cược tốt là% cpaste – yekta

+54

Bạn thực sự có thể sao chép mã vào IPython trực tiếp: trước tiên bạn có thể vô hiệu hóa tự động thụt đầu dòng bằng cách nhập '% autoindent'. – EOL

+0

Cảm ơn EOL! +1 cho bạn – Framester

32

Giải thích rõ về các bước sau:

  • Đầu tiên, sao chép dòng mục tiêu vào clipboard của bạn.

    Loại
  • vào cửa sổ ipython:

    • Nếu trên Tkinter: nhập %paste
    • Nếu không: nhập %cpaste
  • Dán (Ctrl-V) và nhấn Enter.

  • Sau đó nhập -- và nhấn enter.

Ví dụ:

In [1]: %cpaste 
Pasting code; enter '--' alone on the line to stop or use Ctrl-D. 
:for l in "Hello World": 
: print l, 
:-- 
H e l l o W o r l d 
+0

Bạn không cần phải Ctrl-V. Chỉ nhập% paste và nhấn enter. – SeF

2

%paste đòi hỏi Tkinter. Nếu bạn đang ở trong ubuntu, bạn có thể cài đặt nó bằng cách

sudo apt-get install python-tk 

Sau đó khởi động lại ipython và sử dụng %paste để dán từ clipboard của bạn.

0

Một trong những câu trả lời hữu ích đã bị mất trong các nhận xét, vì vậy, bạn muốn khôi phục nó cùng với việc thêm tham chiếu cho một chức năng ma thuật IPython hữu ích khác.

Trước hết hãy nhớ lại những gì @EOL nói, một cách để giải quyết vấn đề của OP là tắt tự động thụt lề bằng cách chạy đầu tiên %autoindent và thực hiện dán (không cần thiết nếu bạn đang sử dụng %paste, tất nhiên).

Bây giờ để thêm thông tin vào những gì đã có ở đây, một chế độ hữu ích hơn trong IPython là %doctest_mode cho phép bạn sao chép ví dụ dán và đoạn trích thử từ chuỗi tài liệu. Điều này cũng hữu ích để thực thi đầu ra phiên tương tác python mà bạn có thể tìm thấy trong tài liệu và các diễn đàn trực tuyến, mà không cần phải loại bỏ các chuỗi dấu nhắc đầu tiên.

13

Tính đến ipython 5 bạn không cần bất kỳ lệnh kỳ diệu, chỉ cần dán nó

ipython5

Nhờ prompt_toolkit, IPython bây giờ hỗ trợ:

  • nghệ đánh dấu màu như bạn nhập
  • Chỉnh sửa nhiều dòng thực (lên và d phím mũi tên riêng di chuyển giữa các dòng)
  • nhiều đường dán mà không vi phạm thụt đầu dòng hoặc ngay lập tức thực thi mã
  • Better giao diện hoàn thành mã (chúng tôi có kế hoạch để cải thiện mà hơn) Tùy chọn chuột hỗ trợ

Thông tin thêm về này here

để nâng cấp ipython lên phiên bản mới nhất

pip install ipython --upgrade 
+0

Có thể dán nhiều dòng và thực thi mã tự động ở mỗi dòng không? –

+0

có, chỉ cần dán mã và nhấn enter. nếu bạn muốn gỡ lỗi, hãy kiểm tra% pdb hoặc ipdb. [ví dụ] (https://github.com/ipython/ipython/issues/9642) – Levon

+0

wow sự ngạc nhiên của nó –

0

Đối với người dùng ubuntu người đang ở trên Python 3.

Các python-tk là dành cho Python 2.

Để làm %paste làm việc trên Python 3, cài đặt python3-tk gói:

sudo apt-get install python3-tk 
Các vấn đề liên quan