Hướng dẫn does raise in python exit function? - có nâng cao trong chức năng thoát python không?

Bạn có hai tùy chọn (ít nhất).

Sử dụng câu lệnh

def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
0:

def do_something(parameter):
    if parameter > 100:
        # display error message if necessary
        return  # 'exit' function and return to caller
    # rest of the code

Bạn cũng có thể

def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
1 chuyển giá trị
def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
2 trở lại cho người gọi. Điều này có thể được sử dụng để cung cấp mã trạng thái chẳng hạn (ví dụ: 0: Thành công, 1: Lỗi).

Hoặc một cách tiếp cận tốt hơn là

def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
3 một ngoại lệ:

def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)

Xem các trường hợp ngoại lệ trong hướng dẫn Python.

Có các lớp ngoại lệ tích hợp (như

def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
4 ở trên). Bạn cũng có thể xác định của riêng bạn như sau:

class ParameterError(Exception):
    pass

Bạn cũng có thể thêm mã bổ sung vào các lớp ngoại lệ tùy chỉnh của mình để xử lý các tham số, hiển thị thông báo lỗi tùy chỉnh, v.v ...

Các trường hợp ngoại lệ tích hợp được liệt kê ở đây.

2021-10-10it về cơ bản hữu ích để thoát khỏi chương trình của bạn khi nó hoàn thành. Dưới đây là năm (!) Những cách để làm như vậy trong Python.
Hướng dẫn does raise in python exit function? - có nâng cao trong chức năng thoát python không?

It’s fundamentally useful to exit your program when it’s done. Here are five(!) ways to do so in Python.

1. def do_something(parameter): if parameter > 100: raise ValueError('Parameter should...') # rest of the code try: do_something(101) except ValueError, e: # display error message if necessary e.g. print str(e) 5

Chúng ta có thể thoát khỏi mã Python bằng cách tăng ngoại lệ

def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
6:

print("Done.")
raise SystemExit()

Trình thông dịch cấp cao nhất bắt được lớp ngoại lệ đặc biệt này và kích hoạt thói quen thoát của nó. Điều này bao gồm các bước như chạy tất cả các chức năng

def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
7, xóa tất cả các đối tượng và cuối cùng gọi chức năng thoát HĐH.

def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
6 Tùy chọn lấy một số nguyên cho mã thoát, trong đó 0 đại diện cho thành công và bất kỳ giá trị nào khác thể hiện sự thất bại. Chúng ta có thể sử dụng điều này để báo hiệu các chương trình gọi là lỗi đã xảy ra:

print("Woops.")
raise SystemExit(1)

(Khi Python gặp sự cố, nó sử dụng mã thoát 1.)

Nếu bạn đang tìm kiếm một câu trả lời nhanh, bạn có thể ngừng đọc ở đây. Sử dụng

def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
9 như một cách rõ ràng nhất để thoát khỏi mã Python và tiếp tục với cuộc sống của bạn.

...

Một cách khó hiểu hơn, chúng ta có thể vượt qua

def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
6 bất kỳ đối tượng nào, trong trường hợp đó, Python sẽ in
class ParameterError(Exception):
    pass
1 của đối tượng đó cho Stderr và trả lại mã thoát 1:

raise SystemExit("Woops.")

Điều này có thể tiện dụng, nhưng tôi đã tranh luận rõ ràng hơn:

print("Woops.", file=sys.stderr)
raise SystemExit(1)

2. class ParameterError(Exception): pass 2

Chúng tôi cũng có thể gọi

class ParameterError(Exception):
    pass
2 để thoát Python, tùy chọn với mã thoát:

Bên dưới điều này chỉ không

class ParameterError(Exception):
    pass
4 (trong c).

Mặc dù

class ParameterError(Exception):
    pass
2 ít gõ hơn
def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
5, nhưng nó yêu cầu nhập, điều này hơi bất tiện. Ngoài ra, nó che giấu các chi tiết rằng một ngoại lệ được nêu ra.

3. class ParameterError(Exception): pass 7 và class ParameterError(Exception): pass 8

class ParameterError(Exception):
    pass
7 và
class ParameterError(Exception):
    pass
8 là các bản tích hợp bổ sung được thêm vào bởi mô -đun Python, ____ ____31. Cả hai về cơ bản gọi
def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
5, tùy chọn có mã thoát, như:

Điều này trông siêu thuận tiện! Chúng tôi không cần nhập bất cứ thứ gì, và tên rất ngắn.

Thật không may, mô -đun trang web là tùy chọn. Chúng ta có thể bỏ qua tải nó bằng cách chạy Python bằng cờ

print("Done.")
raise SystemExit()
3. Trong trường hợp đó, cuộc gọi của chúng tôi đến
class ParameterError(Exception):
    pass
8 hoặc
class ParameterError(Exception):
    pass
7 vẫn có thể thoát, nhưng với ngoại lệ
print("Done.")
raise SystemExit()
6:

$ python -S -c 'exit(1)'
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'exit' is not defined

Bởi vì

class ParameterError(Exception):
    pass
7 và
class ParameterError(Exception):
    pass
8 là tùy chọn, nên tôi khuyên bạn nên tránh sử dụng chúng trong các chương trình của bạn. Nhưng họ rất tốt để sử dụng tại Repre, đó là lý do tại sao chúng tồn tại. Họ thậm chí còn in thông tin sử dụng khi được viết mà không có dấu ngoặc, để giúp người dùng mới cố gắng thoát khỏi câu hỏi:

>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit

Thông điệp đó dẫn chúng ta đến ...

4. Ctrl-D (từ repled)

CTRL-D là phím tắt bàn phím phổ quát để thoát. Nó gửi EOF (kết thúc tệp) đến chương trình hiện tại, cho biết người dùng đã gửi xong đầu vào và nó sẽ thoát.

CTRL-D hoạt động với mọi chương trình dòng lệnh, bao gồm

print("Done.")
raise SystemExit()
9. Vì vậy, nó tốt nhất để học lối tắt này, thay vì sử dụng
class ParameterError(Exception):
    pass
7 dành riêng cho Python. Sau đó, bạn có thể thoát
print("Woops.")
raise SystemExit(1)
1,
print("Woops.")
raise SystemExit(1)
2,
print("Woops.")
raise SystemExit(1)
3,
print("Woops.")
raise SystemExit(1)
4 và bất kỳ chương trình dòng lệnh nào khác mà không cần suy nghĩ thứ hai.

5. print("Woops.") raise SystemExit(1) 5

Hàm

print("Woops.")
raise SystemExit(1)
6 thoát khỏi Python ngay lập tức với mã thoát đã cho
print("Woops.")
raise SystemExit(1)
7. Nó làm như vậy bằng cách gọi trực tiếp chức năng thoát HĐH cơ bản.

Không giống như tăng

def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
6, sử dụng
print("Woops.")
raise SystemExit(1)
5 ngăn Python chạy quá trình thoát thông thường của nó. Điều này rất tàn phá và thường không mong muốn, do đó, tư nhân/nguy hiểm của người Hồi giáo nhấn mạnh prefx.

Lý do duy nhất mà tôi đã tìm thấy khi gọi

print("Woops.")
raise SystemExit(1)
5 là khi gỡ lỗi trong trường hợp tăng
def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
6 không hoạt động. Ví dụ, trong một luồng, nâng
def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)
6 không thoát khỏi progarm - nó chỉ dừng luồng. Gọi trực tiếp
print("Woops.")
raise SystemExit(1)
5 có thể dừng toàn bộ chương trình, có thể được kết hợp với một vài bản in gỡ lỗi được đặt tốt để kiểm tra trạng thái.

Vì vậy, nó đáng để biết rằng

print("Woops.")
raise SystemExit(1)
5 tồn tại, mặc dù bạn nên tránh nó trong cuộc sống hàng ngày.

✨bonus✨ 6. gọi trực tiếp chức năng thoát OS

print("Woops.")
raise SystemExit(1)
5 là một trình bao bọc mỏng xung quanh chức năng thoát cơ sở của chúng tôi. Chúng ta có thể gọi chức năng này trực tiếp thông qua mô -đun Python từ
raise SystemExit("Woops.")
6. Điều này không mang lại bất kỳ lợi thế nào - trên thực tế, nó tệ hơn, bởi vì mã của chúng tôi đã giành được công việc trên tất cả các OS OS. Nhưng nó rất tuyệt khi biết về.

Trên Linux/MacOS/các Unix khác, chức năng thoát có sẵn trong thư viện tiêu chuẩn C là

class ParameterError(Exception):
    pass
7. Chúng tôi thấy chi tiết của nó bằng cách chạy
raise SystemExit("Woops.")
8 - trang Linux Man đang trực tuyến tại đây. Chúng ta có thể gọi nó với
raise SystemExit("Woops.")
6 như vậy:

from ctypes import CDLL
from ctypes.util import find_library


libc = CDLL(find_library("libc"))
libc.exit(1)

Khá gọn gàng!

Vây

Nhờ Anthony Sottile cho mẹo sử dụng

print("Woops.", file=sys.stderr)
raise SystemExit(1)
0 trong video này.

Tôi hy vọng bạn đã tìm thấy lối ra mà bạn đang tìm kiếm,

—Adam


Nếu dự án Django của bạn, thử nghiệm dài chạy của bạn, tôi đã viết một cuốn sách có thể giúp ích.


Một email tóm tắt một tuần, không spam, tôi pinky hứa.

Bài viết liên quan:

  • Mẫu tập lệnh Python, có và không có gợi ý loại và async
  • Mẹo để gỡ lỗi với
    print("Woops.", file=sys.stderr)
    raise SystemExit(1)
    
    1

Tags: Python python

Raise có ngăn chặn chức năng python không?

Hiệu quả của một tuyên bố nâng cao là thực hiện chuyển hướng trong một đối sánh ngoại trừ bộ hoặc dừng chương trình vì không có sự phù hợp nào ngoại trừ bộ được tìm thấy để xử lý ngoại lệ.Đối tượng ngoại lệ được tạo bởi Raise có thể chứa một chuỗi tin nhắn cung cấp thông báo lỗi có ý nghĩa.to stop the program because no matching except suite was found to handle the exception. The exception object created by raise can contain a message string that provides a meaningful error message.

Bạn có thể trở lại sau khi tăng Python không?

Bạn không thể nâng cao và trả lại, nhưng bạn có thể trả về nhiều giá trị, trong đó giá trị đầu tiên giống như những gì bạn hiện đang sử dụng và thứ hai cho biết một ngoại lệ có phát sinh trả về đúng hay không.exc_info () == (không có, không có, không có) hoặc một cái gì đó tương tự nhưng phù hợp hơn với bối cảnh. , but you could return multiple values, where the first is the same as what you're currently using, and the second indicates if an exception arose return True, sys. exc_info() == (None, None, None) or something similar but better suited to context.

Nâng cao làm gì trong Python?

Từ khóa RAISE được sử dụng để nâng cao một ngoại lệ.Bạn có thể xác định loại lỗi nào để nêu và văn bản để in cho người dùng.raise an exception. You can define what kind of error to raise, and the text to print to the user.

Python có chức năng thoát khi trở về không?

Một câu lệnh trả về kết thúc một cách hiệu quả một hàm;Đó là, khi trình thông dịch Python thực hiện các hướng dẫn của hàm và đạt được sự trở lại, nó sẽ thoát khỏi chức năng tại thời điểm đó.when the Python interpreter executes a function's instructions and reaches the return , it will exit the function at that point.