Hướng dẫn how do i display an exception message in python? - làm cách nào để hiển thị thông báo ngoại lệ trong python?

Nếu bạn muốn lớp lỗi, thông báo lỗi và dấu vết ngăn xếp, hãy sử dụng

Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : , Message : ans = 1/0']
9.
Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : , Message : ans = 1/0']
9
.

Mã làm việc tối thiểu với một số định dạng:

import sys
import traceback

try:
    ans = 1/0
except BaseException as ex:
    # Get current system exception
    ex_type, ex_value, ex_traceback = sys.exc_info()

    # Extract unformatter stack traces as tuples
    trace_back = traceback.extract_tb(ex_traceback)

    # Format stacktrace
    stack_trace = list()

    for trace in trace_back:
        stack_trace.append("File : %s , Line : %d, Func.Name : %s, Message : %s" % (trace[0], trace[1], trace[2], trace[3]))

    print("Exception type : %s " % ex_type.__name__)
    print("Exception message : %s" %ex_value)
    print("Stack trace : %s" %stack_trace)

Trong đó cung cấp đầu ra sau:

Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : , Message : ans = 1/0']

Hàm sys.exc_info () cung cấp cho bạn chi tiết về ngoại lệ gần đây nhất. Nó trả lại một tuple là

# Creating an empty list
new_list =[]

n = int(input("Enter number of elements : "))

for i in range(n):

    item = int(input())

    # Add the item in the list
    new_list.append(item)

print(new_list)
0.sys.exc_info() gives you details about the most recent exception. It returns a tuple of
# Creating an empty list
new_list =[]

n = int(input("Enter number of elements : "))

for i in range(n):

    item = int(input())

    # Add the item in the list
    new_list.append(item)

print(new_list)
0.

# Creating an empty list
new_list =[]

n = int(input("Enter number of elements : "))

for i in range(n):

    item = int(input())

    # Add the item in the list
    new_list.append(item)

print(new_list)
1 là một ví dụ của đối tượng Traceback. Bạn có thể định dạng dấu vết với các phương thức được cung cấp. Nhiều hơn có thể được tìm thấy trong tài liệu Traceback.

Đôi khi, một kịch bản Python bắt gặp một tình huống bất thường mà nó có thể xử lý, và chương trình bị chấm dứt hoặc bị sập. Trong bài viết này, chúng tôi sẽ học cách bắt và in các tin nhắn ngoại lệ trong Python. Nếu bạn muốn tìm hiểu thêm về lập trình Python, hãy truy cập các hướng dẫn của Python.How to catch and print the exception messages in python. If you want to learn more about Python Programming, visit Python Tutorials.

Phương pháp phổ biến nhất để bắt và in thông báo ngoại lệ trong Python là bằng cách sử dụng ngoại trừ và thử câu lệnh. Bạn cũng có thể lưu thông báo lỗi của nó bằng phương pháp này. Một phương pháp khác là sử dụng logger.exception () tạo ra thông báo lỗi cũng như dấu vết nhật ký, chứa thông tin như số dòng mã xảy ra ngoại lệ và thời gian xảy ra ngoại lệ.

Ví dụ phổ biến nhất là một filenotfounderror, khi bạn nhập một tệp, nhưng nó không tồn tại. Tương tự, việc chia một số cho Zero cung cấp cho một ZerodivisionError và hiển thị thông báo lỗi do hệ thống tạo ra. Tất cả các lỗi thời gian chạy này được gọi là ngoại lệ. Những ngoại lệ này nên được bắt và báo cáo để ngăn chặn chương trình bị chấm dứt.FileNotFoundError” when you’re importing a file, but it doesn’t exist. Similarly, dividing a number by zero gives a “ZeroDivisionError” and displays a system-generated error message. All these run-time errors are known as exceptions. These exceptions should be caught and reported to prevent the program from being terminated.

Trong Python, các trường hợp ngoại lệ được xử lý với câu lệnh (thử ngoại trừ). Các câu lệnh xử lý các ngoại lệ được đặt trong khối ngoại trừ trong khi mệnh đề thử bao gồm các biểu thức có thể tăng một ngoại lệ. Hãy xem xét một ví dụ trong đó bạn lấy một danh sách các số nguyên làm đầu vào từ người dùng.(try… except) statement. The statements which handle the exceptions are placed in the except block whereas the try clause includes the expressions which can raise an exception. Consider an example in which you take a list of integers as input from the user.

Thí dụ

# Creating an empty list
new_list =[]

n = int(input("Enter number of elements : "))

for i in range(n):

    item = int(input())

    # Add the item in the list
    new_list.append(item)

print(new_list)

Chương trình được hiển thị ở trên lấy số nguyên làm đầu vào và tạo một danh sách các số nguyên này. Nếu người dùng nhập bất kỳ ký tự nào, chương trình sẽ gặp sự cố và tạo ra đầu ra sau.

Output:

Enter number of elements : 7
23
45
34
65
2a
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
 in ()
      3 n = int(input("Enter number of elements : "))
      4 for i in range(n):
----> 5     item = int(input())
      6     # Add the item in the list
      7     new_list.append(item)

ValueError: invalid literal for int() with base 10: '2a'

Sử dụng ngoại trừ và thử câu lệnh để bắt và in ngoại lệ và lưu thông báo lỗi của nó

Phương pháp đầu tiên để bắt và in các tin nhắn ngoại lệ trong Python là bằng cách sử dụng ngoại trừ và thử câu lệnh. Nếu người dùng nhập bất cứ thứ gì ngoại trừ số nguyên, chúng tôi muốn chương trình bỏ qua đầu vào đó và chuyển sang giá trị tiếp theo. Theo cách này, chương trình của chúng tôi sẽ không gặp sự cố và sẽ bắt và in thông báo ngoại lệ. Điều này có thể được thực hiện bằng cách sử dụng thử và ngoại trừ các câu lệnh. Bên trong mệnh đề thử, chúng tôi sẽ lấy đầu vào từ người dùng và nối nó vào biến New New_List. Nếu người dùng đã nhập bất kỳ đầu vào nào ngoại trừ các số nguyên nhầm, khối ngoại trừ sẽ in vào mục nhập không hợp lệ và di chuyển về phía giá trị tiếp theo. Theo cách này, chương trình tiếp tục chạy và bỏ qua các mục không hợp lệ.

# Creating an empty list
new_list =[]

n = int(input("Enter number of elements : "))

for i in range(n):

  try:
    item = int(input())

    # Add the item in the list
    new_list.append(item)

  except:

    print("Invalid Input!")

    print("Next entry.")

print("The list entered by user is: ", new_list)

Output:

Enter number of elements : 7
65
43
23
4df
Invalid Input!
Next entry.
76
54
90
The list entered by user is:  [65, 43, 23, 76, 54, 90]

Có nhiều phương pháp khác nhau để bắt và báo cáo các ngoại lệ này bằng cách sử dụng thử và ngoại trừ khối. Một số trong số chúng được liệt kê dưới đây cùng với các ví dụ.

Bắt và báo cáo/in các tin nhắn ngoại lệ trong Python

Đây là phương pháp thứ hai để bắt và in các tin nhắn ngoại lệ trong Python. Với sự trợ giúp của chức năng in, bạn có thể nắm bắt, nhận và in một thông báo ngoại lệ bằng Python. Hãy xem xét một ví dụ trong đó bạn có một danh sách chứa các yếu tố của các loại dữ liệu khác nhau. Bạn muốn chia tất cả các số nguyên cho bất kỳ số nào. Số này trên bộ phận với các kiểu dữ liệu chuỗi sẽ tăng cách loại kiểu và chương trình sẽ chấm dứt nếu các ngoại lệ không được xử lý. Ví dụ được hiển thị bên dưới mô tả cách xử lý vấn đề này bằng cách nắm bắt ngoại lệ bằng cách sử dụng khối Try-Except và báo cáo nó bằng lệnh in.. Consider an example in which you have a list containing elements of different data types. You want to divide all the integers by any number. This number on division with the string datatypes will raise “TypeError” and the program will terminate if the exceptions are not handled. The example shown below describes how to handle this problem by capturing the exception using the try-except block and reporting it using the print command.

Ví dụ 3:

list_arr=[76,65,87,"5f","7k",78,69]

for elem in list_arr:

  try:

    print("Result: ", elem/9)

  except Exception as e:

    print("Exception occurred for value '"+ elem + "': "+ repr(e))

Output:

Result:  8.444444444444445
Result:  7.222222222222222
Result:  9.666666666666666
Exception occurred for value '5f': TypeError("unsupported operand type(s) for /: 'str' and 'int'")
Exception occurred for value '7k': TypeError("unsupported operand type(s) for /: 'str' and 'int'")
Result:  8.666666666666666
Result:  7.666666666666667

Sử dụng thử và logger. Exexception để in thông báo lỗi

Một phương pháp khác là sử dụng logger.exception () tạo ra thông báo lỗi cũng như dấu vết nhật ký, chứa thông tin như số dòng mã xảy ra ngoại lệ và thời gian xảy ra ngoại lệ. Phương thức logger.exception () này nên được bao gồm trong câu lệnh ngoại trừ; Nếu không, nó sẽ không hoạt động đúng.

import logging

logger=logging.getLogger()

num1=int(input("Enter the number 1:"))

num2=int(input("Enter the number 2:"))

try: 

  print("Result: ", num1/num2)

except Exception as e:

  logger.exception("Exception Occured while code Execution: "+ str(e))

Output:

Enter the number 1:82
Enter the number 2:4
Result:  20.5

Giả sử nếu người dùng nhập 0 trong số thứ 2, thì điều này sẽ tăng một ZerodivisionError, như được hiển thị bên dưới.

Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : , Message : ans = 1/0']
0

Tương tự, nếu bạn có hai danh sách bao gồm các số nguyên và bạn muốn tạo một danh sách bao gồm các kết quả thu được bằng cách chia list1 với List2. Giả sử bạn không biết liệu hai danh sách có bao gồm số nguyên hay không.

Ví dụ 5:

Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : , Message : ans = 1/0']
1

Output:

Trong ví dụ này, thế giới trên thế giới trong chỉ số thứ 2 của List2 là một chuỗi và 32 trên bộ phận với một chuỗi sẽ tăng một ngoại lệ. Nhưng, chúng tôi đã xử lý ngoại lệ này bằng cách sử dụng thử và ngoại trừ khối. Lệnh logger.exception () in lỗi cùng với dòng xảy ra và sau đó di chuyển về phía chỉ mục tiếp theo. Tương tự, tất cả các giá trị được tính toán và lưu trữ trong một danh sách khác sau đó được hiển thị ở cuối mã.

Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : , Message : ans = 1/0']
2

Mô -đun logger có một hàm khác logger.error (), chỉ trả về một thông báo lỗi. Ví dụ sau đây cho thấy hàm logger.error () có thể được sử dụng để thu thập các thông báo ngoại lệ trong Python. Trong ví dụ này, chúng tôi vừa thay thế logger.exception trong ví dụ trên bằng hàm logger.error ()

Ví dụ 6:

Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : , Message : ans = 1/0']
3

Output:

Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : , Message : ans = 1/0']
4

Bắt và in các thông báo ngoại lệ cụ thể

Phần trước là tất cả về cách bắt và in ngoại lệ. Nhưng, làm thế nào bạn sẽ bắt được một ngoại lệ cụ thể như ValueError, ZerodivisionError, Irtunterror, v.v.? Có hai trường hợp nếu bạn muốn bắt một ngoại lệ cụ thể hoặc nhiều ngoại lệ cụ thể. Ví dụ sau đây cho thấy cách bắt một ngoại lệ cụ thể.

Ví dụ 7:

Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : , Message : ans = 1/0']
5

Output:

Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : , Message : ans = 1/0']
6

Tương tự, nếu bạn muốn in kết quả của A/B, và người dùng nhập 0 dưới dạng đầu vào trong biến Biêu, thì ví dụ tương tự sẽ không thể đối phó với ZerodivisionError. Do đó, chúng tôi phải sử dụng nhiều điều khoản ngoại trừ các mệnh đề như hình dưới đây.

Ví dụ 8:

Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : , Message : ans = 1/0']
7

Output:

Mã tương tự bây giờ có thể xử lý nhiều ngoại lệ.

Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : , Message : ans = 1/0']
8

Để tóm tắt, tất cả các phương pháp được mô tả ở trên là hiệu quả và hiệu quả. Bạn có thể sử dụng bất kỳ phương pháp nào được liệt kê ở trên để bắt và in & nbsp; các thông báo ngoại lệ trong Python tùy thuộc vào sở thích và mức độ thoải mái của bạn với phương thức. Nếu bạn có bất kỳ truy vấn nào liên quan đến bài viết này, xin vui lòng cho chúng tôi biết trong phần bình luận. Phản hồi của bạn quan trọng rất nhiều đối với chúng tôi.

Làm thế nào để tôi thấy các tin nhắn ngoại lệ trong Python?

Nếu bạn muốn lớp lỗi, thông báo lỗi và dấu vết ngăn xếp, hãy sử dụng sys.exc_info (). Các sys chức năng. exc_info () cung cấp cho bạn chi tiết về ngoại lệ gần đây nhất.use sys. exc_info() . The function sys. exc_info() gives you details about the most recent exception.

Làm thế nào để bạn in một thông báo lỗi trong Python?

3 cách để in vào luồng lỗi tiêu chuẩn trong Python..
In vào stderr bằng print () Phương thức đầu tiên để in ra lỗi tiêu chuẩn là sử dụng hàm in tích hợp ().....
In stderr sử dụng sys.Stderr.....
In stderr bằng cách sử dụng ghi nhật ký ..

Làm cách nào để in một tin nhắn ngoại lệ?

Sử dụng phương thức printStackTrace () - nó in tên của ngoại lệ, mô tả và dấu vết ngăn xếp hoàn chỉnh bao gồm dòng xảy ra ngoại lệ.Sử dụng phương thức toString () - nó in tên và mô tả ngoại lệ.Sử dụng phương thức getMessage () - chủ yếu được sử dụng.Nó in mô tả về ngoại lệ. − It print the name of the exception, description and complete stack trace including the line where exception occurred. Using toString() method − It prints the name and description of the exception. Using getMessage() method − Mostly used. It prints the description of the exception.

Làm thế nào để bạn tạo một thông điệp ngoại lệ trong Python?

Trong Python, người dùng có thể xác định các ngoại lệ tùy chỉnh bằng cách tạo một lớp mới.Lớp ngoại lệ này phải được bắt nguồn, trực tiếp hoặc gián tiếp, từ lớp ngoại lệ tích hợp.Hầu hết các trường hợp ngoại lệ tích hợp cũng có nguồn gốc từ lớp này.creating a new class. This exception class has to be derived, either directly or indirectly, from the built-in Exception class. Most of the built-in exceptions are also derived from this class.