Làm thế nào để bạn kiểm tra xem một giá trị có trong một đối tượng python không?

Cho một đối tượng, nhiệm vụ là kiểm tra xem đối tượng đó có phải là danh sách hay không. Phương pháp số 1. Sử dụng isinstance

Python3




# Python code to demonstrate

# check whether the object

# is a list or not

 

# initialisation list

ini_list1= [

your object is a list
your object is not a list
0_______0_______1_______0_______2
your object is a list
your object is not a list
1
your object is a list
your object is not a list
4
your object is a list
your object is not a list
1
your object is a list
your object is not a list
6
your object is a list
your object is not a list
1
your object is a list
your object is not a list
8
your object is a list
your object is not a list
9

Trong Python, tất cả các biến phải được xác định trước khi sử dụng. Đối tượng None là một giá trị mà bạn thường gán để biểu thị rằng bạn không có giá trị thực cho một biến, như trong

try: x
except NameError: x = None

Sau đó, thật dễ dàng để kiểm tra xem một biến có bị ràng buộc với None hay không

if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)

Python không có chức năng cụ thể để kiểm tra xem một biến có được xác định hay không, vì tất cả các biến đều phải được xác định trước khi sử dụng, ngay cả khi ban đầu được gán đối tượng None. Việc cố gắng truy cập một biến chưa được xác định trước đó sẽ tạo ra một ngoại lệ NameError (bạn có thể xử lý bằng một câu lệnh

if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)
0/
if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)
1, như bạn có thể làm với bất kỳ ngoại lệ Python nào khác)

Nó được coi là bất thường trong Python khi không biết liệu một biến đã được xác định chưa. Tuy nhiên, nếu bạn vẫn ở trong tình huống này, bạn có thể đảm bảo rằng một biến đã cho trên thực tế được xác định (là None, nếu không có gì khác) bằng cách cố gắng truy cập nó bên trong mệnh đề

if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)
0 và gán cho nó đối tượng None nếu việc truy cập làm tăng NameError . Lưu ý rằng None thực sự không có gì kỳ diệu, chỉ là một đối tượng tích hợp được sử dụng theo quy ước (và được trả về bởi các hàm thoát mà không trả về bất kỳ thứ gì cụ thể). Bạn có thể sử dụng bất kỳ giá trị nào khác phù hợp với mục đích của mình để khởi tạo các biến không xác định; . 24

Thay vì đảm bảo rằng một biến được khởi tạo, bạn có thể muốn kiểm tra xem biến đó có được xác định ở nơi bạn muốn sử dụng hay không

try: x
except NameError: some_fallback_operation(  )
else: some_operation(x)

Đây là một giải pháp thay thế hoàn toàn có thể chấp nhận được đối với mã trong công thức và một số người sẽ nói rằng nó giống Pythonic hơn. Tuy nhiên, lưu ý rằng nếu bạn chọn giải pháp thay thế này, bạn phải viết mã mọi thứ theo thứ tự này. trường hợp bất thường, có lỗi trước, sau đó là trường hợp bình thường, không có lỗi. Với cách tiếp cận của công thức, bạn có thể muốn đảo ngược điều kiện bảo vệ thành

if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)
7 và viết mã trường hợp bình thường trước. Chắc chắn những điểm này là chi tiết vụn vặt, nhưng đôi khi sự rõ ràng có thể được cải thiện theo cách này. Hơn nữa, bạn phải cẩn thận để tránh sự thay đổi trong phương án này.

try:
    x
    some_operation(x)
except NameError:
    some_fallback_operation(  )

Trong biến thể này, lệnh gọi tới

if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)
8 cũng được bao hàm bởi trình xử lý ngoại lệ, vì vậy nếu có lỗi trong hàm
if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)
8 hoặc trong bất kỳ hàm nào được gọi từ hàm đó, thì mã này sẽ che giấu lỗi đó và dường như sẽ tiếp tục hoạt động bình thường khi cần. . Bạn phải luôn cẩn thận để mệnh đề
if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)
0 của mình (trong câu lệnh
if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)
0/
if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)
1) không vô tình che nhiều mã hơn mức bạn thực sự định che, điều này có thể dễ dàng che giấu lỗi. Mệnh đề
try: x
except NameError: some_fallback_operation(  )
else: some_operation(x)
3 trong câu lệnh
if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)
0/
if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)
1 dành cho mã chỉ nên thực thi nếu không có ngoại lệ nào được đưa ra nhưng bản thân nó không được bao phủ bởi trình xử lý ngoại lệ, bởi vì bạn không mong đợi các ngoại lệ từ nó và muốn chẩn đoán vấn đề ngay lập tức nếu các ngoại lệ đó xảy ra

Nhiều tình huống mà bạn có thể cho rằng sẽ làm phát sinh các biến không xác định một cách tự nhiên, chẳng hạn như xử lý tệp cấu hình hoặc biểu mẫu web, được xử lý tốt hơn bằng cách sử dụng từ điển và kiểm tra sự hiện diện của khóa (với phương pháp

try: x
except NameError: some_fallback_operation(  )
else: some_operation(x)
6, phương thức
if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)
0/
if x is None:
    some_fallback_operation(  )
else:
    some_operation(x)
1 hoặc . Ví dụ: thay vì xử lý tệp cấu hình người dùng theo cách này

execfile('userconfig')
try: background_color
except NameError: background_color = 'black'
try: foreground_color
except NameError: foreground_color = 'white'
...

làm như thế này

config = dict(globals(  ))
execfile('userconfig', config)
background_color = config.get('background_color', 'black')
foreground_color = config.get('foreground_color', 'white')
...

try:
    x
    some_operation(x)
except NameError:
    some_fallback_operation(  )
1 yêu cầu Python 2. 2, nhưng bạn có thể nhận được hiệu ứng tương tự trong các phiên bản Python cũ hơn bằng cách sử dụng
try:
    x
    some_operation(x)
except NameError:
    some_fallback_operation(  )
2 thay thế. Dù sao đi nữa, bạn nên sử dụng một từ điển được chỉ định rõ ràng cho
try:
    x
    some_operation(x)
except NameError:
    some_fallback_operation(  )
3,
try:
    x
    some_operation(x)
except NameError:
    some_fallback_operation(  )
4 và
try:
    x
    some_operation(x)
except NameError:
    some_fallback_operation(  )
5 để kiểm soát không gian tên của bạn. Một trong nhiều lợi ích của việc sử dụng một từ điển được chỉ định rõ ràng như vậy, như được hiển thị ở đây, là bạn không cần phải lo lắng về các biến không xác định mà có thể chỉ cần sử dụng phương thức
try: x
except NameError: some_fallback_operation(  )
else: some_operation(x)
9 của từ điển để tìm nạp từng khóa với một giá trị mặc định được chỉ định rõ ràng sẽ được sử dụng

Nếu bạn biết chắc biến đó nằm trong không gian tên nào (i. e. , cụ thể là

try:
    x
    some_operation(x)
except NameError:
    some_fallback_operation(  )
7 hoặc cụ thể là
try:
    x
    some_operation(x)
except NameError:
    some_fallback_operation(  )
8), bạn cũng có thể sử dụng các phương pháp như
try: x
except NameError: some_fallback_operation(  )
else: some_operation(x)
6 hoặc
try: x
except NameError: some_fallback_operation(  )
else: some_operation(x)
9 trong từ điển liên quan. Tuy nhiên, các biến không phải là
try:
    x
    some_operation(x)
except NameError:
    some_fallback_operation(  )
7 hay
try:
    x
    some_operation(x)
except NameError:
    some_fallback_operation(  )
8 có thể tồn tại (nhờ tính năng phạm vi lồng nhau là tùy chọn trong Python 2. 1, nhưng luôn bật trong Python 2. 2 trở lên). Ngoài ra, các thư mục không gian tên đặc biệt được trả về bởi
try:
    x
    some_operation(x)
except NameError:
    some_fallback_operation(  )
7 và
try:
    x
    some_operation(x)
except NameError:
    some_fallback_operation(  )
8 không phù hợp với các phương thức biến đổi như
try:
    x
    some_operation(x)
except NameError:
    some_fallback_operation(  )
0, vì vậy, tốt hơn hết bạn nên sắp xếp để sử dụng từ điển rõ ràng của riêng mình thay vì các không gian tên cục bộ hoặc toàn cầu, bất cứ khi nào khả thi