2012-07-17 15 views
7

Giả sử tôi đang chạy một số mã tương tác trong IPython và nó tạo ra một ngoại lệ còn tự do, như:Làm thế nào để có được bàn tay của bạn trên đối tượng ngoại lệ bị bắt bởi xử lý ngoại lệ mặc định ipython?

In [2]: os.waitpid(1, os.WNOHANG) 
--------------------------------------------------------------------------- 
OSError         Traceback (most recent call last) 
<ipython-input-2-bacc7636b058> in <module>() 
----> 1 os.waitpid(1, os.WNOHANG) 

OSError: [Errno 10] No child processes 

ngoại lệ này hiện đang bị chặn lại bởi các xử lý ngoại lệ mặc định IPython và tạo ra một thông báo lỗi. Có thể bằng cách nào đó để trích xuất các đối tượng ngoại lệ đã bị bắt bởi IPython?

Tôi muốn có tác dụng tương tự như trong:

# Typing this into IPython prompt: 
try: 
    os.waitpid(1, os.WNOHANG) 
except Exception, exc: 
    pass 
# (now I can interact with "exc" variable) 

nhưng tôi muốn nó mà không try/except soạn sẵn này.

Trả lời

21

Tôi nghĩ sys.last_value nên làm các trick:

In [8]: 1/0 
--------------------------------------------------------------------------- 
ZeroDivisionError       Traceback (most recent call last) 

/home/ubuntu/<ipython console> in <module>() 

ZeroDivisionError: integer division or modulo by zero 

In [11]: sys.last_value 
Out[11]: ZeroDivisionError('integer division or modulo by zero',) 

Nếu bạn muốn vui vẻ hơn với những thứ như vậy, kiểm tra các traceback module, nhưng điều đó có lẽ sẽ không được sử dụng nhiều trong ipython.