Hướng dẫn python return exception from function - python trả về ngoại lệ từ hàm

10

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Giả sử tôi có chức năng sau:

def test():
  ...
  if x['error']:
    raise

Điều này sẽ tăng một ngoại lệ bất kể

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
4 có được xác định hay không.

Thay vào đó nếu tôi thử điều này, nó không ném bất kỳ ngoại lệ nào:

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return

Làm thế nào tôi có thể kiểm tra một giá trị cụ thể và trả về một ngoại lệ nếu nó được xác định và để trả về thành công nếu nó không được xác định?

Hỏi ngày 4 tháng 9 năm 2018 lúc 2:14Sep 4, 2018 at 2:14

Hướng dẫn python return exception from function - python trả về ngoại lệ từ hàm

3

Nếu bạn muốn trả về lỗi dưới dạng chuỗi:

>>> def test():
    try:
        if x['error']:raise
    except Exception as err:
        return err

>>> test()
NameError("name 'x' is not defined",)

Nếu bạn muốn xảy ra lỗi:

>>> def test():
    try:
        if x['error']:raise
    except:
        raise

>>> test()
Traceback (most recent call last):
  File "", line 1, in 
    test()
  File "", line 3, in test
    if x['error']:raise
NameError: name 'x' is not defined

Đã trả lời ngày 4 tháng 9 năm 2018 lúc 2:36Sep 4, 2018 at 2:36

Hướng dẫn python return exception from function - python trả về ngoại lệ từ hàm

Black Thunderblack ThunderBlack Thunder

6.4435 huy hiệu vàng29 Huy hiệu bạc57 Huy hiệu đồng5 gold badges29 silver badges57 bronze badges

def test():
  ...
  if x.get(‘error’):
    raise

Bạn có thể tránh không có lỗi khi sử dụng chức năng

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
5 được tích hợp từ điển. Nhận sẽ trả về
def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
6 nếu giá trị tại khóa được chỉ định không tồn tại thay vì ném một ngoại lệ.

Đã trả lời ngày 4 tháng 9 năm 2018 lúc 2:28Sep 4, 2018 at 2:28

Hướng dẫn python return exception from function - python trả về ngoại lệ từ hàm

Hãy thử cái này

def check_not_exist(d,k):
   #if keys exists in dict,raise it
   if k in d:
     raise
   else:
     return True

Đã trả lời ngày 4 tháng 9 năm 2018 lúc 2:33Sep 4, 2018 at 2:33

Vinayvinayvinay

1.3201 Huy hiệu vàng13 Huy hiệu bạc22 Huy hiệu đồng1 gold badge13 silver badges22 bronze badges

Nâng cao, trở lại và làm thế nào để không bao giờ thất bại trong Python.

Tôi nghe câu hỏi này rất nhiều: Tôi có nêu ra hoặc trả lại lỗi này trong Python không?

Câu trả lời đúng sẽ phụ thuộc vào các mục tiêu của logic ứng dụng của bạn. Bạn muốn đảm bảo mã Python của bạn không bị thất bại trong âm thầm, cứu bạn và đồng đội của bạn khỏi phải săn lùng các lỗi cố thủ sâu sắc.ensure your Python code doesn’t fail silently, saving you and your teammates from having to hunt down deeply entrenched errors.

Ở đây, sự khác biệt giữa

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
7 và
def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
8 khi xử lý các lỗi trong Python.

Khi nào nên nâng cao

Tuyên bố

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
7 cho phép lập trình viên buộc một ngoại lệ cụ thể xảy ra. (8.4 Tăng ngoại lệ)

Sử dụng

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
7 Khi bạn biết bạn muốn có một hành vi cụ thể, chẳng hạn như:

raise TypeError("Wanted strawberry, got grape.")

Tăng một ngoại lệ chấm dứt dòng chảy của chương trình của bạn, cho phép ngoại lệ để bong bóng lên ngăn xếp cuộc gọi. Trong ví dụ trên, điều này sẽ cho phép bạn xử lý rõ ràng

>>> def test():
    try:
        if x['error']:raise
    except Exception as err:
        return err

>>> test()
NameError("name 'x' is not defined",)
1 sau. Nếu
>>> def test():
    try:
        if x['error']:raise
    except Exception as err:
        return err

>>> test()
NameError("name 'x' is not defined",)
1 không được xử lý, việc thực thi mã sẽ dừng và bạn sẽ nhận được một thông báo ngoại lệ chưa được xử lý.

Nâng cao là hữu ích trong trường hợp bạn muốn xác định một hành vi nhất định sẽ xảy ra. Ví dụ: bạn có thể chọn không cho phép một số từ trong trường văn bản:

if "raisins" in text_field:
    raise ValueError("That word is not allowed here")

Raise có một ví dụ về một ngoại lệ, hoặc một dẫn xuất của lớp ngoại lệ. Dưới đây là tất cả các trường hợp ngoại lệ tích hợp Python.

Nâng cao có thể giúp bạn tránh viết các chức năng thất bại âm thầm. Ví dụ: mã này sẽ không nêu ra một ngoại lệ nếu

>>> def test():
    try:
        if x['error']:raise
    except Exception as err:
        return err

>>> test()
NameError("name 'x' is not defined",)
3 không tồn tại:

import os


def sandwich_or_bust(bread: str) -> str:
    jam = os.getenv("JAM")
    return bread + str(jam) + bread


s = sandwich_or_bust("\U0001F35E")
print(s)
# Prints "🍞None🍞" which is not very tasty.

Để khiến chức năng

>>> def test():
    try:
        if x['error']:raise
    except Exception as err:
        return err

>>> test()
NameError("name 'x' is not defined",)
4 thực sự phá sản, hãy thêm
def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
7:

import os


def sandwich_or_bust(bread: str) -> str:
    jam = os.getenv("JAM")
    if not jam:
        raise ValueError("There is no jam. Sad bread.")
    return bread + str(jam) + bread


s = sandwich_or_bust("\U0001F35E")
print(s)
# ValueError: There is no jam. Sad bread.

Bất cứ khi nào mã của bạn tương tác với một biến bên ngoài, mô -đun hoặc dịch vụ, có khả năng thất bại. Bạn có thể sử dụng

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
7 trong một tuyên bố
>>> def test():
    try:
        if x['error']:raise
    except Exception as err:
        return err

>>> test()
NameError("name 'x' is not defined",)
7 để giúp đảm bảo những thất bại đó không im lặng.

Tăng trong >>> def test(): try: if x['error']:raise except Exception as err: return err >>> test() NameError("name 'x' is not defined",) 8 và >>> def test(): try: if x['error']:raise except Exception as err: return err >>> test() NameError("name 'x' is not defined",) 9

Để xử lý một lỗi có thể xảy ra bằng cách thực hiện một hành động nếu có, hãy sử dụng tuyên bố

>>> def test():
    try:
        if x['error']:raise
    except Exception as err:
        return err

>>> test()
NameError("name 'x' is not defined",)
8 ____ ____29.

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
0

Điều này cho phép bạn

>>> def test():
    try:
        if x['error']:raise
    except:
        raise

>>> test()
Traceback (most recent call last):
  File "", line 1, in 
    test()
  File "", line 3, in test
    if x['error']:raise
NameError: name 'x' is not defined
2 trước khi tái tạo ngoại lệ. Nếu bạn muốn tuyên truyền một ngoại lệ bị bắt, hãy sử dụng
def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
7 mà không có tranh luận để tránh mất dấu vết ngăn xếp.

Nếu bạn không biết rằng ngoại lệ sẽ là

>>> def test():
    try:
        if x['error']:raise
    except:
        raise

>>> test()
Traceback (most recent call last):
  File "", line 1, in 
    test()
  File "", line 3, in test
    if x['error']:raise
NameError: name 'x' is not defined
4, bạn cũng có thể sử dụng
>>> def test():
    try:
        if x['error']:raise
    except:
        raise

>>> test()
Traceback (most recent call last):
  File "", line 1, in 
    test()
  File "", line 3, in test
    if x['error']:raise
NameError: name 'x' is not defined
5 hoặc bắt bất kỳ dẫn xuất nào của lớp
>>> def test():
    try:
        if x['error']:raise
    except:
        raise

>>> test()
Traceback (most recent call last):
  File "", line 1, in 
    test()
  File "", line 3, in test
    if x['error']:raise
NameError: name 'x' is not defined
6 với
>>> def test():
    try:
        if x['error']:raise
    except:
        raise

>>> test()
Traceback (most recent call last):
  File "", line 1, in 
    test()
  File "", line 3, in test
    if x['error']:raise
NameError: name 'x' is not defined
7. Bất cứ khi nào có thể, nó tốt hơn để nâng cao và xử lý các ngoại lệ một cách rõ ràng.

Sử dụng

>>> def test():
    try:
        if x['error']:raise
    except:
        raise

>>> test()
Traceback (most recent call last):
  File "", line 1, in 
    test()
  File "", line 3, in test
    if x['error']:raise
NameError: name 'x' is not defined
8 cho mã để thực thi nếu
>>> def test():
    try:
        if x['error']:raise
    except Exception as err:
        return err

>>> test()
NameError("name 'x' is not defined",)
8 không tăng ngoại lệ. Ví dụ:

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
1

Bạn cũng có thể đặt dòng in trong khối

>>> def test():
    try:
        if x['error']:raise
    except Exception as err:
        return err

>>> test()
NameError("name 'x' is not defined",)
8, tuy nhiên, điều này ít rõ ràng hơn.

Khi nào trở lại

Khi bạn sử dụng

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
8 trong Python, bạn sẽ trả lại một giá trị. Một chức năng trở về vị trí mà nó được gọi từ.

Mặc dù nó thành ngữ nhiều hơn so với các lỗi

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
7 trong Python, nhưng có thể có những lúc bạn tìm thấy
def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
8 để được áp dụng nhiều hơn.

Ví dụ: nếu mã Python của bạn tương tác với các thành phần khác không xử lý các lớp ngoại lệ, bạn có thể muốn trả lại một tin nhắn thay thế. Ở đây, một ví dụ sử dụng tuyên bố

>>> def test():
    try:
        if x['error']:raise
    except Exception as err:
        return err

>>> test()
NameError("name 'x' is not defined",)
8 ____ ____29:

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
2

Lưu ý rằng khi bạn trả về một đối tượng lớp

>>> def test():
    try:
        if x['error']:raise
    except:
        raise

>>> test()
Traceback (most recent call last):
  File "", line 1, in 
    test()
  File "", line 3, in test
    if x['error']:raise
NameError: name 'x' is not defined
6, bạn sẽ nhận được một đại diện cho giá trị liên quan của nó, thường là mục đầu tiên trong danh sách các đối số của nó. Trong ví dụ trên, đây là lời giải thích chuỗi của ngoại lệ. Trong một số trường hợp, nó có thể là một tuple với thông tin khác về ngoại lệ.

Bạn cũng có thể sử dụng

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
8 để đưa ra một đối tượng lỗi cụ thể, chẳng hạn như với
def test():
  ...
  if x.get(‘error’):
    raise
8 trong Django. Ví dụ: bạn có thể muốn trả lại
def test():
  ...
  if x.get(‘error’):
    raise
9 thay vì
def check_not_exist(d,k):
   #if keys exists in dict,raise it
   if k in d:
     raise
   else:
     return True
0 vì lý do bảo mật:

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
3

Sử dụng

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
8 có thể giúp bạn viết mã ồn ào một cách thích hợp khi chức năng của bạn dự kiến ​​sẽ trả lại một giá trị nhất định và khi tương tác với các yếu tố bên ngoài.

Phần quan trọng nhất

Thất bại im lặng tạo ra một số lỗi khó chịu nhất để tìm và sửa chữa. Bạn có thể giúp tạo trải nghiệm phát triển dễ chịu cho chính mình và nhóm của bạn bằng cách sử dụng

def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
7 và
def test():
  ...
  try:
    if x['error']:
      raise
  except:
    return
8 để đảm bảo rằng các lỗi được xử lý trong mã Python của bạn.ensure that errors are handled in your Python code.

Tôi viết về thực tiễn phát triển tốt và cách cải thiện năng suất như một nhà phát triển phần mềm. Bạn có thể nhận được những lời khuyên này ngay trong hộp thư đến của bạn bằng cách đăng ký bên dưới!

Chúng ta có thể trả lại một ngoại lệ từ một chức năng trong Python không?

Sử dụng Raise để ném các ngoại lệ trong Python Nếu bạn có một điều kiện cụ thể trong chức năng của mình sẽ làm hỏng chương trình của bạn (nếu/khi điều kiện đó được đáp ứng), bạn có thể nêu ra một ngoại lệ bằng cách sử dụng câu lệnh RAISE và cung cấp một đối tượng ngoại lệ để nâng cao. If you have a specific condition in your function that should loudly crash your program (if/when that condition is met) you can raise an exception by using the raise statement and providing an exception object to raise.

Làm cách nào để trả lại một lỗi ngoại lệ trong Python?

Là một nhà phát triển Python, bạn có thể chọn ném một ngoại lệ nếu xảy ra điều kiện.Để ném (hoặc nâng cao) một ngoại lệ, hãy sử dụng từ khóa nâng cao.use the raise keyword.

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

Bắt các trường hợp ngoại lệ trong Python trong Python, các ngoại lệ có thể được xử lý bằng cách sử dụng câu lệnh thử.Hoạt động quan trọng có thể tăng một ngoại lệ được đặt bên trong mệnh đề thử.Mã xử lý các ngoại lệ được viết trong mệnh đề ngoại trừ.using a try statement. The critical operation which can raise an exception is placed inside the try clause. The code that handles the exceptions is written in the except clause.

Nâng cao trong Python trở lại?

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ị thứ nhất 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. , 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.