2010-06-07 27 views
8

là có anyway để hiển thị tại sao một "thử" thất bại, và bỏ qua "ngoại trừ", mà không cần viết ra tất cả các lỗi có thể bằng tay, và không kết thúc chương trình?Làm thế nào để cho thấy lý do tại sao "thử" thất bại trong python

dụ:

try: 
    1/0 
except: 
    someway to show 
    "Traceback (most recent call last): 
     File "<pyshell#0>", line 1, in <module> 
     1/0 
    ZeroDivisionError: integer division or modulo by zero" 

Tôi không muốn làm if:print error 1, elif: print error 2, elif: etc.... tôi muốn thấy lỗi đó sẽ được hiển thị có try chưa có

+1

Semi-OT: unspecific ' ngoại trừ mệnh đề là gần như luôn luôn là một ý tưởng tồi. Bạn nên luôn luôn xác định những ngoại lệ bạn đang có kế hoạch để bắt, vì vậy bạn không vô tình mess một cái gì đó lên khi một ngoại lệ bất ngờ, nói một 'KeyboardInterruptException' đến cùng mà bạn sau đó không xử lý một cách chính xác. –

Trả lời

10

Hãy thử:

>>> try: 
...  1/0 
... except Exception, e: 
... print e 
... 
integer division or modulo by zero 

Có những biến thể cú pháp khác, ví dụ:

>>> try: 
...  1/0 
... except Exception as e: 
... print e 
... 
integer division or modulo by zero 

Thông tin thêm có thể được tìm thấy trong errors tutorial.

+1

wow. tôi thực sự thất bại. cảm ơn! – calccrypto

+0

Nếu bạn muốn tăng lại ngoại lệ (ví dụ: tạm dừng thực thi, v.v.), hãy sử dụng 'nâng cao e' hoặc chỉ' tăng'. – detly

7

Tôi thường sử dụng traceback để đăng nhập ngoại lệ như vậy để đăng nhập hoặc hiển thị trên stderr:

import traceback 
import sys 

try: 
    print 1/0 
except Exception: 
    s = traceback.format_exc() 
    serr = "there were errors:\n%s\n" % (s) 
    sys.stderr.write(serr) 

Output sẽ hiển thị thông tin về dòng là nguồn nơi ngoại lệ xảy ra:

there were errors: 
Traceback (most recent call last): 
    File "c:\test\ex.py", line 5, in <module> 
    print 1/0 
ZeroDivisionError: integer division or modulo by zero 
+2

Từ http://www.python.org/dev/peps/pep-0008/: "Khi bắt ngoại lệ, hãy đề cập đến các trường hợp ngoại lệ cụ thể bất cứ khi nào có thể thay vì sử dụng mệnh đề 'except:' trống. [...] A bare ' ngoại trừ: 'mệnh đề sẽ bắt ngoại lệ SystemExit và KeyboardInterrupt, gây khó khăn hơn cho việc ngắt chương trình bằng Control-C và có thể ngụy trang các vấn đề khác. Nếu bạn muốn bắt tất cả ngoại lệ báo hiệu lỗi chương trình, hãy sử dụng' ngoại trừ ngoại lệ: '. " – Walter

+0

OK. Đã thêm 'Exception' vào' except'. –

Các vấn đề liên quan