Python trả lại hoặc tăng ValueError


Tăng một ngoại lệ

Là nhà phát triển Python, bạn có thể chọn ném ngoại lệ nếu có điều kiện xảy ra

Để ném (hoặc tăng) một ngoại lệ, hãy sử dụng từ khóa raise

Thí dụ

Báo lỗi và dừng chương trình nếu x nhỏ hơn 0

x = -1

nếu x < 0
nâng cao Ngoại lệ ("Xin lỗi, không có số nào dưới 0")

Tự mình thử »

Từ khóa raise được sử dụng để đưa ra một ngoại lệ

Bạn có thể xác định loại lỗi nào sẽ gây ra và văn bản sẽ in cho người dùng

Thí dụ

Tăng TypeError nếu x không phải là số nguyên

x = "xin chào"

nếu không gõ (x) là int
tăng TypeError("Chỉ cho phép số nguyên")

Tự mình thử »




💬 câu hỏi. Làm thế nào để bạn viết một hàm trả về một lỗi Python thực sự thay vì một “mã lỗi” chẳng hạn như -1 hoặc None trong trường hợp có lỗi xảy ra?

Ví dụ: bạn có thể muốn kiểm tra các đối số đầu vào của hàm xem có đúng loại hoặc độ dài không (trong trường hợp đối số có thể lặp lại) trước khi chạy thân hàm. Trong trường hợp kiểm tra của bạn không thành công, bạn muốn trả về một thông báo lỗi

Đây là một ví dụ mà bạn trả về -1 để cho biết rằng đã xảy ra lỗi, tôi. e. , các đối số có độ dài khác nhau

def f(l1, l2):
    if len(l1) != len(l2):
        # Error Should Be Returned
        return -1
    # Do stuff

Tuy nhiên, trả về một giá trị giả không phải là rất Pythonic

Giải pháp thực hành tốt nhất

Python trả lại hoặc tăng ValueError

Giải pháp thực hành tốt nhất để chỉ ra rằng có lỗi trong một hàm Python không phải là trả về một giá trị giả mà là đưa ra một lỗi bằng cách sử dụng cú pháp như

def f(l1, l2):
    if len(l1) != len(l2):
        raise ValueError("Arguments have different lengths!")
    # Do stuff


f('hello', 'hi')
1

Ưu điểm chính là lỗi lan truyền (thuật ngữ kỹ thuật. “bubbles up”) thông qua ngăn xếp lệnh gọi hàm cho đến khi nó bị bắt bởi câu lệnh

def f(l1, l2):
    if len(l1) != len(l2):
        raise ValueError("Arguments have different lengths!")
    # Do stuff


f('hello', 'hi')
2

Thí dụ. nếu hàm

def f(l1, l2):
    if len(l1) != len(l2):
        raise ValueError("Arguments have different lengths!")
    # Do stuff


f('hello', 'hi')
3 gọi hàm
def f(l1, l2):
    if len(l1) != len(l2):
        raise ValueError("Arguments have different lengths!")
    # Do stuff


f('hello', 'hi')
4 gọi hàm
def f(l1, l2):
    if len(l1) != len(l2):
        raise ValueError("Arguments have different lengths!")
    # Do stuff


f('hello', 'hi')
5 gây ra lỗi, lỗi sẽ được truyền đến
def f(l1, l2):
    if len(l1) != len(l2):
        raise ValueError("Arguments have different lengths!")
    # Do stuff


f('hello', 'hi')
4 và sau đó đến
def f(l1, l2):
    if len(l1) != len(l2):
        raise ValueError("Arguments have different lengths!")
    # Do stuff


f('hello', 'hi')
3 có thể bắt nó bằng cách sử dụng khối
def f(l1, l2):
    if len(l1) != len(l2):
        raise ValueError("Arguments have different lengths!")
    # Do stuff


f('hello', 'hi')
8

Một ưu điểm khác của việc tăng lỗi là khả năng đọc

Một thông báo lỗi chỉ ra vấn đề trong một tin nhắn văn bản tiếng Anh dễ hiểu. Một con số kỳ diệu có khả năng bị hiểu sai, e. g. , người gọi hàm có thể nghĩ rằng số ma thuật là đầu ra thực của hàm — chứ không phải mã lỗi

Thí dụ

Hãy xem một ví dụ đơn giản

def f(l1, l2):
    if len(l1) != len(l2):
        raise ValueError("Arguments have different lengths!")
    # Do stuff


f('hello', 'hi')

Điều này dẫn đến đầu ra sau

Traceback (most recent call last):
  File "C:\Users\...\code.py", line 8, in 
    f('hello', 'hi')
  File "C:\Users\...\code.py", line 4, in f
    raise ValueError("Arguments have different lengths!")
ValueError: Arguments have different lengths!

Điều này dẫn chúng ta đến câu hỏi sau

Làm thế nào để bắt lỗi?

Python trả lại hoặc tăng ValueError

Để bắt lỗi và tránh để lỗi đó chấm dứt toàn bộ chương trình của bạn, bạn cần bắt nó bằng cách sử dụng khối

def f(l1, l2):
    if len(l1) != len(l2):
        raise ValueError("Arguments have different lengths!")
    # Do stuff


f('hello', 'hi')
9

🌍 Hướng dẫn đề xuất. Thử/Ngoại trừ Python — Hướng dẫn Đơn giản

Python thử ngoại trừ. Hướng dẫn minh họa

Python trả lại hoặc tăng ValueError

Xem video này trên YouTube

Đây là một ví dụ tối thiểu

def f(l1, l2):
    if len(l1) != len(l2):
        # Error Should Be Returned
        raise ValueError("Arguments have different lengths!")
    # Do stuff


try:
    f('hello', 'hi')
except:
    print('No error stack')

Đầu ra chỉ đơn giản là

No error stack

Lưu ý rằng lỗi sẽ "làm nổi bong bóng" lệnh gọi hàm trong trường hợp bạn có nhiều hàm gọi lẫn nhau cho đến khi một lệnh gọi hàm được nhúng trong khối

def f(l1, l2):
    if len(l1) != len(l2):
        raise ValueError("Arguments have different lengths!")
    # Do stuff


f('hello', 'hi')
9 và lỗi đó bị phát hiện

Ở đây’ chúng ta sẽ không bao giờ đến được dòng được đánh dấu trong hàm

def f(l1, l2):
    if len(l1) != len(l2):
        raise ValueError("Arguments have different lengths!")
    # Do stuff


f('hello', 'hi')
4 do lỗi lan truyền qua ngăn xếp hàm

def f(l1, l2):
    if len(l1) != len(l2):
        # Error Should Be Returned
        raise ValueError("Arguments have different lengths!")
    # Do stuff


def g(l1, l2):
    f(l1, l2)
    print('Never reached when error')


try:
    g('hello', 'hi')
except:
    print('No error stack')

Hãy cùng xem xét một trường hợp mà bạn không phát hiện ra lỗi—"dấu vết ngăn xếp" đầu ra trông như thế nào?

def f(l1, l2):
    if len(l1) != len(l2):
        # Error Should Be Returned
        raise Error("Arguments have different lengths!")
    # Do stuff


def g(l1, l2):
    f(l1, l2)
    print('Never reached when error')


g([1, 2, 3], [])

đầu ra

Traceback (most recent call last):
  File "C:\...\code.py", line 13, in 
    g([1, 2, 3], [])
  File "C:\...\code.py", line 9, in g
    f(l1, l2)
  File "C:\...\code.py", line 4, in f
    raise Error("Arguments have different lengths!")
NameError: name 'Error' is not defined

Bạn có thể thấy rằng đầu ra cung cấp cho bạn tất cả chi tiết về các lệnh gọi hàm và cách lỗi lan truyền qua ngăn xếp hàm

Tóm lược

Để trả về lỗi từ một hàm Python, không sử dụng các giá trị giả như

Traceback (most recent call last):
  File "C:\Users\...\code.py", line 8, in 
    f('hello', 'hi')
  File "C:\Users\...\code.py", line 4, in f
    raise ValueError("Arguments have different lengths!")
ValueError: Arguments have different lengths!
2 hoặc
Traceback (most recent call last):
  File "C:\Users\...\code.py", line 8, in 
    f('hello', 'hi')
  File "C:\Users\...\code.py", line 4, in f
    raise ValueError("Arguments have different lengths!")
ValueError: Arguments have different lengths!
3. Thay vào đó, hãy sử dụng từ khóa
Traceback (most recent call last):
  File "C:\Users\...\code.py", line 8, in 
    f('hello', 'hi')
  File "C:\Users\...\code.py", line 4, in f
    raise ValueError("Arguments have different lengths!")
ValueError: Arguments have different lengths!
4 chẳng hạn như
Traceback (most recent call last):
  File "C:\Users\...\code.py", line 8, in 
    f('hello', 'hi')
  File "C:\Users\...\code.py", line 4, in f
    raise ValueError("Arguments have different lengths!")
ValueError: Arguments have different lengths!
5. Lỗi sẽ "làm nổi bong bóng" ngăn xếp cho đến khi bị chặn bởi một khối thử/ngoại trừ

Cảm ơn đã đọc qua toàn bộ hướng dẫn. ❤️ Để tiếp tục học hỏi, vui lòng xem học viện email miễn phí của chúng tôi và tải xuống các mẹo gian lận của chúng tôi tại đây

Python trả lại hoặc tăng ValueError

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners (NoStarch 2020), đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Tăng ValueError trong Python là gì?

Lỗi giá trị Python tăng lên khi giá trị sai được gán cho một đối tượng . Điều này có thể xảy ra nếu giá trị không hợp lệ cho một hoạt động nhất định hoặc nếu giá trị không tồn tại. Ví dụ: nếu một số nguyên âm được truyền cho phép toán căn bậc hai, thì ValueError sẽ xuất hiện.

Python có tăng lợi nhuận không?

Bạn không thể tăng và trả lại nhưng bạn có thể trả về nhiều giá trị, trong đó giá trị đầu tiên giống với giá trị bạn hiện đang sử dụng và giá trị thứ hai cho biết liệu có ngoại lệ hay không .

Làm cách nào để giải quyết ValueError trong Python?

Một khối try-ngoại trừ có thể được sử dụng trong các chương trình Python để sửa ValueError. Khối thử phải chứa các dòng mã có thể hiển thị ValueError và khối ngoại trừ phải có mã để nắm bắt và xử lý sự cố. Khối try-ngoại trừ được sử dụng trong trường hợp này để kiểm tra ValueError

Tầm quan trọng của việc sử dụng khối ngoại lệ Raise ValueError là gì?

Nó được sử dụng để hiển thị ngoại lệ hiện tại trong trình xử lý ngoại lệ để có thể xử lý ngoại lệ đó trong ngăn xếp cuộc gọi . Thí dụ. Trong đoạn mã dưới đây, chúng tôi kiểm tra xem một số nguyên là chẵn hay lẻ. nếu số nguyên là số lẻ, một ngoại lệ được nêu ra.