Hướng dẫn python del variable if exists - biến python del nếu tồn tại

I try doing:

def create_l():
    if 'l' in globals():
        l.destroy()
    l = Listbox(root)

This works fine but it returns a syntax warning:

Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration

I am just wondering if there is a way to do this without the syntax warning.

Hướng dẫn python del variable if exists - biến python del nếu tồn tại

Taku

29.9k11 gold badges69 silver badges81 bronze badges

asked Jun 10, 2017 at 19:28

3

Use the

Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration
0 keyword

if 'l' in globals():
    del l

answered Jun 10, 2017 at 19:32

Hướng dẫn python del variable if exists - biến python del nếu tồn tại

7

You should use the

Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration
1 key word when declaring the variable
Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration
2:

global l #declare the variable as global
l = 'foo'

answered Jun 10, 2017 at 19:35

Hướng dẫn python del variable if exists - biến python del nếu tồn tại

MMFMMF

5,5823 gold badges15 silver badges19 bronze badges

0

Kiểm tra nếu một biến được xác định

Tín dụng: Hamish Lawson

Vấn đề

Bạn muốn thực hiện các khóa học hành động khác nhau dựa trên việc một biến có được xác định hay không.

Dung dịch

Trong Python, tất cả các biến dự kiến ​​sẽ được xác định trước khi sử dụng. Đối tượng

Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration
3 là một giá trị 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 đó, nó dễ dàng kiểm tra xem một biến có bị ràng buộc với

Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration
3:

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

Thảo luận

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 dự kiến ​​đã được xác định trước khi sử dụng, ngay cả khi ban đầu được gán cho đối tượng

Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration
3. Cố gắng truy cập vào một biến đã được xác định trước đây sẽ tăng ngoại lệ
Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration
6 (mà bạn có thể xử lý với câu lệnh ________ 17/________ 18, vì bạn có thể cho bất kỳ ngoại lệ Python nào khác).

Nó được coi là bất thường trong Python không biết liệu một biến đã được xác định. Nhưng nếu bạn vẫn còn trong tình huống này, bạn có thể đảm bảo rằng một biến nhất định trên thực tế được xác định (là

Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration
3, nếu không có gì khác) bằng cách cố gắng truy cập nó trong một điều khoản
Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration
7 và gán cho nó đối tượng
Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration
3 nếu truy cập tăng
Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration
6 ngoại lệ. Lưu ý rằng
Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration
3 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 bởi quy ước (và được trả về bởi các chức năng thoát mà không trả lại bất cứ điều gì cụ thể). Bạn có thể sử dụng bất kỳ giá trị nào khác phù hợp cho mục đích của mình để khởi tạo các biến không xác định; Để biết ví dụ mạnh mẽ và thú vị, xem Công thức 5.24.

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

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

Đây là một sự thay thế hoàn toàn có thể chấp nhận được cho mã trong công thức, và một số người sẽ nói rằng nó có nhiều 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ã theo thứ tự này: trường hợp dị thường, lỗi trước, thì trường hợp bình thường, không lỗi. Với cách tiếp cận công thức, bạn có thể muốn đảo ngược điều kiện bảo vệ thành

if 'l' in globals():
    del l
4 và mã hóa trường hợp bình thường trước. Những điểm này là minutiae, để chắc chắn, 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, cuộc gọi đến

if 'l' in globals():
    del l
5 cũng được bao phủ bởi trình xử lý ngoại lệ, vì vậy nếu có lỗi trong hàm
if 'l' in globals():
    del l
5 hoặc trong bất kỳ chức năng nào được gọi từ nó, mã này sẽ che dấu lỗi và dường như tiến hành hoạt động bình thường khi nó nên thất bại với một thông báo lỗi. Bạn phải luôn cẩn thận rằng các điều khoản
Warning (from warnings module):
  File "C:\Users\User\Desktop\l.py", line 4
    l = Listbox(root)
SyntaxWarning: name 'l' is used prior to global declaration
7 của bạn (trong ________ 17/________ 18 tuyên bố) Không vô tình bao gồm nhiều mã hơn bạn thực sự có ý định bao gồm, điều này có thể dễ dàng che dấu lỗi. Điều khoản
global l #declare the variable as global
l = 'foo'
0 trong câu lệnh ________ 17/________ 18 dành cho mã chỉ nên thực thi nếu không có ngoại lệ nào được nêu ra nhưng không nên được xử lý bởi người xử lý ngoại lệ, 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ể nghĩ sẽ tự nhiên làm phát sinh các biến không xác định, chẳng hạn như xử lý các 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à thử nghiệm cho sự hiện diện của khóa (với phương pháp

global l #declare the variable as global
l = 'foo'
3, ________ 17/________ 18 hoặc các phương pháp
global l #declare the variable as global
l = 'foo'
6 hoặc
global l #declare the variable as global
l = 'foo'
7 của các đối tượng từ điển). 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')
...

global l #declare the variable as global
l = 'foo'
8 yêu cầu Python 2.2, nhưng bạn có thể có được hiệu ứng tương tự trong các phiên bản Python trước đó bằng cách sử dụng
global l #declare the variable as global
l = 'foo'
9 thay thế. Sử dụng một từ điển được chỉ định rõ ràng cho
try: x
except NameError: x = None
0,
try: x
except NameError: x = None
1 và
try: x
except NameError: x = None
2 dù sao cũng được khuyến khích, để 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, bạn không cần phải lo lắng về các biến không xác định mà chỉ cần sử dụng phương thức
global l #declare the variable as global
l = 'foo'
6 của từ điển để tìm nạp từng khóa với giá trị mặc định được chỉ định rõ ràng để được sử dụng để được sử dụng Nếu chìa khóa không có trong từ điển.

Nếu bạn biết chắc chắn rằng không gian tên nào là biến trong (nghĩa là, cụ thể là

try: x
except NameError: x = None
4 hoặc cụ thể
try: x
except NameError: x = None
5), bạn cũng có thể sử dụng các phương thức như
global l #declare the variable as global
l = 'foo'
3 hoặc
global l #declare the variable as global
l = 'foo'
6 trên từ điển có liên quan. Tuy nhiên, các biến trong cả
try: x
except NameError: x = None
4 cũng như
try: x
except NameError: x = None
5 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 ở 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ả lại bởi
try: x
except NameError: x = None
4 và
try: x
except NameError: x = None
5 không phù hợp với các phương pháp đột biến như
global l #declare the variable as global
l = 'foo'
7, do đó, bạn vẫn nên sắp xếp để sử dụng từ điển rõ ràng của riêng bạn thay vì không gian tên địa phương hoặc toàn cầu, bất cứ khi nào khả thi.

Làm thế nào để bạn kiểm tra xem một biến có tồn tại hay không trong Python?

Để kiểm tra sự tồn tại của các biến trên toàn cầu, chúng tôi sẽ sử dụng hàm Globals () để có được từ điển của bảng biểu tượng toàn cầu hiện tại.use the globals() function to get the dictionary of the current global symbol table.

Làm thế nào để bạn phá hủy một biến trong Python?

Sử dụng lệnh 'del' là phương pháp được biết đến và dễ nhất để xóa các biến trong Python.Từ khóa Del xóa các đối tượng.Vì mọi thứ trong Python là một đối tượng, do đó, các danh sách, bộ dữ liệu và từ điển cũng có thể bị xóa bằng cách sử dụng 'del'. is the most known and easiest method to delete variables in Python. The del keyword deletes the objects. Since everything in Python is an object, therefore lists, tuples and dictionaries can also be deleted using 'del'.

Làm cách nào để xóa một biến khỏi danh sách trong Python?

Trong Python, sử dụng các phương thức danh sách rõ ràng (), pop () và xóa () để xóa các mục (phần tử) khỏi danh sách.Cũng có thể xóa các mục bằng cách sử dụng câu lệnh DEL bằng cách chỉ định một vị trí hoặc phạm vi có chỉ mục hoặc lát cắt.use list methods clear() , pop() , and remove() to remove items (elements) from a list. It is also possible to delete items using del statement by specifying a position or range with an index or slice.

Làm thế nào để bạn xóa nhiều biến trong Python?

Bạn có thể sử dụng danh sách được phân tách bằng dấu phẩy sau "DEL", DEL VAR1, VAR2, VAR3, để xóa các biến đã chọn.