Tôi có một ứng dụng hiện có kết nối với cơ sở dữ liệu. Nó đang chạy dưới Python 2.7.
Ứng dụng này không nhất quán trong cách nó sử dụng không và "" để điền vào các biến không có giá trị. Tôi muốn làm cho điều này nhất quán và cố gắng cập nhật mã theo cách này hay cách khác.
Suy nghĩ với tư cách là một người cơ sở dữ liệu, tôi nghĩ không giống như NULL và sẽ cho rằng đó sẽ là lựa chọn chính xác cho các biến số trống nhưng sau đó điều này gây ra vấn đề khi ứng dụng làm những việc như
if variable.upper[] == "X":
#Do something
Vì điều này sẽ gây ra lỗi nếu biến không phải là loại.
tôi có thể làm
if variable is not None and variable.upper[] == "X":
#Do something
Nhưng điều này có vẻ không cần thiết dài dòng.
Có một thực hành tốt nhất cho cách xử lý điều này?
DREFTYMAC
30.5K26 Huy hiệu vàng116 Huy hiệu bạc179 Huy hiệu đồng26 gold badges116 silver badges179 bronze badges
Hỏi ngày 15 tháng 12 năm 2011 lúc 11:50Dec 15, 2011 at 11:50
1
Bạn có thể cắt giảm mã bằng cách viết một chút bằng cách viết
if variable and variable.upper[] == "X":
#Do something
Nếu biến không có hoặc trống, thì nó tương đương với sai.
Đã trả lời ngày 15 tháng 12 năm 2011 lúc 11:52Dec 15, 2011 at 11:52
Obmargobmargobmarg
9.20934 huy hiệu bạc58 Huy hiệu đồng34 silver badges58 bronze badges
if variable and variable.upper[] == 'X'
là một chút ít wordy. Nó cũng sẽ đối xử với không và chuỗi trống theo cùng một cách nếu đó là thứ bạn muốn
EDIT: Lưu ý rằng điều này có ngữ nghĩa khác nhau cho biểu thức bạn đã đăng theo cách nó xử lý các chuỗi trống ... tức là trong biểu thức của bạn, RHS của và sẽ được đánh giá nếu biến là chuỗi trống, nhưng trong biểu thức này sẽ không Khi chuỗi trống đánh giá thành
if variable is not None and variable.upper[] == "X":
#Do something
0Đã trả lời ngày 15 tháng 12 năm 2011 lúc 11:53Dec 15, 2011 at 11:53
Jjwchoyjjwchoyjjwchoy
1.88816 huy hiệu bạc20 Huy hiệu đồng16 silver badges20 bronze badges
Nếu cả
if variable is not None and variable.upper[] == "X":
#Do something
1 hoặc if variable is not None and variable.upper[] == "X":
#Do something
2 đều sẽ là một tốc ký, nhưng nó chắc chắn không chính xác bằng mã gốc. Tôi sợ bạn sẽ không tốt hơn nhiều, mặc dù.Bạn có thể làm
def norm[s]:
return s or ''
...
if norm[s] == 'X':
Nhưng cuối cùng nó cũng sẽ không thay đổi nhiều. Có lẽ sự khác biệt ban đầu không quá mâu thuẫn chút nào, mà là rất thực dụng trong bối cảnh?
Đã trả lời ngày 15 tháng 12 năm 2011 lúc 11:54Dec 15, 2011 at 11:54
Alexander Gessleralexander GesslerAlexander Gessler
44,8K6 Huy hiệu vàng80 Huy hiệu bạc122 Huy hiệu đồng6 gold badges80 silver badges122 bronze badges
0
Đối với những người muốn phân biệt
if variable is not None and variable.upper[] == "X":
#Do something
3 với chuỗi trống [if variable is not None and variable.upper[] == "X":
#Do something
4], hãy sử dụng if variable is not None and variable.upper[] == "X":
#Do something
5def is_empty_string[value]:
... return str[value] == ''
...
is_empty_string[None]
False
is_empty_string[0]
False
is_empty_string[' ']
False
is_empty_string['']
True
Đã trả lời ngày 11 tháng 6 năm 2020 lúc 15:36Jun 11, 2020 at 15:36
Chuyển đổi không thành một chuỗi trống trong python #
Sử dụng boolean hoặc toán tử để chuyển đổi không có chuỗi trống trong Python, ví dụ:
6. Boolean hoặc toán tử trả về giá trị bên trái nếu đó là sự thật, nếu không giá trị bên phải được trả về. Vì if variable is not None and variable.upper[] == "X":
#Do something
3 là một giá trị giả, hoạt động sẽ trả về if variable is not None and variable.upper[] == "X":
#Do something
8.if variable is not None and variable.upper[] == "X":
#Do something
Copied!
name = None result = name or "" print[result] # 👉️ ""
Chúng tôi đã sử dụng boolean hoặc toán tử để trả về một chuỗi trống nếu giá trị bên trái là giả.
Tất cả các giá trị không phải là sự thật được coi là giả mạo. Các giá trị giả trong Python là:
- Các hằng số được xác định là giả mạo:
3 vàif variable is not None and variable.upper[] == "X": #Do something
0.if variable is not None and variable.upper[] == "X": #Do something
1 [không] thuộc bất kỳ loại số nàoif variable and variable.upper[] == "X": #Do something
- Trình tự và bộ sưu tập trống:
8 [Chuỗi trống],if variable is not None and variable.upper[] == "X": #Do something
3 [Tuple trống],if variable and variable.upper[] == "X": #Do something
4 [danh sách trống],if variable and variable.upper[] == "X": #Do something
5 [Từ điển trống],if variable and variable.upper[] == "X": #Do something
6 [bộ trống],if variable and variable.upper[] == "X": #Do something
7 [phạm vi trống].if variable and variable.upper[] == "X": #Do something
Biểu thức
8 trả về giá trị bên trái nếu đó là sự thật, nếu không giá trị bên phải được trả về.if variable and variable.upper[] == "X":
#Do something
Vì
if variable is not None and variable.upper[] == "X":
#Do something
3 là một giá trị giả, nên biểu thức if variable and variable.upper[] == 'X'
0 sẽ luôn trả về if variable and variable.upper[] == 'X'
1.Lưu ý rằng biểu thức
8 cũng sẽ trả về if variable and variable.upper[] == "X":
#Do something
1 nếu if variable and variable.upper[] == 'X'
4 là bất kỳ giá trị giả nào khác, ví dụ: if variable and variable.upper[] == 'X'
1, if variable and variable.upper[] == "X":
#Do something
0 hoặc một danh sách trống, dict hoặc tuple.if variable is not None and variable.upper[] == "X":
#Do something
Ngoài ra, bạn có thể sử dụng câu lệnh
if variable and variable.upper[] == 'X'
7 để kiểm tra xem biến lưu trữ if variable is not None and variable.upper[] == "X":
#Do something
3 và gán lại nó thành một chuỗi trống.Copied!
name = None if name is None: name = "" print[name] # 👉️ ""
Kiểm tra
if variable is not None and variable.upper[] == "X":
#Do something
3 rõ ràng hơn nhiều và khối if variable and variable.upper[] == 'X'
7 sẽ chỉ chạy nếu biến lưu trữ giá trị if variable is not None and variable.upper[] == "X":
#Do something
3.Điều kiện sẽ không được thỏa mãn nếu biến lưu trữ bất kỳ giá trị giả nào khác.
Bạn cũng có thể sử dụng câu lệnh One-Liner
def norm[s]:
return s or ''
...
if norm[s] == 'X':
2.Copied!
name = None name = "" if name is None else name print[name] # 👉️ ""
Nếu biến lưu trữ
if variable is not None and variable.upper[] == "X":
#Do something
3, nó sẽ được đặt thành một chuỗi trống, nếu không nó sẽ được đặt thành giá trị hiện tại của nó.Copied!
name = 'hello' name = "" if name is None else name print[name] # 👉️ "hello"