Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Learn None and Binary Data | Cross-Type Interactions
Data Types in Python

bookNone and Binary Data

Real programs often deal with missing values and raw binary data. Use None to represent the absence of a value, and bytes or bytearray to handle binary content from files or networks. Learn when to use each and how to safely convert between text and bytes.

None for "No Value"

None is a single special object that means "nothing here".

12345678910111213
# Basic checks result = None email = None print("result is None:", result is None) # True print("email is None:", email is None) # True # Identity checks are the reliable way if result is None: print("No result yet") if email is not None: print("Email present") else: print("Email missing")
copy

None is falsey, but so are 0 and "". Prefer is None when you truly mean "missing".

123
value = 0 print("not value:", not value) # True - but 0 is a valid value print("value is None:", value is None) # False - correctly distinguishes 0 from missing
copy

Defaults and Fallbacks

1234567891011
x = None safe_or = x or "unknown" # replaces any falsey value safe_none_only = "unknown" if x is None else x print("x=None, x or 'unknown':", safe_or) # 'unknown' print("x=None, None-only fallback:", safe_none_only) # 'unknown' x = 0 safe_or = x or "unknown" safe_none_only = "unknown" if x is None else x print("x=0, x or 'unknown':", safe_or) # 'unknown' - maybe not desired print("x=0, None-only fallback:", safe_none_only) # 0 - preserves valid zero
copy

Functions and Parameters

12345678910111213
def find_user(name): # returns None if not found return None def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" user = find_user("Ada") print("user is None:", user is None) # True print(add_tag("hello")) # "[general] hello" print(add_tag("hello", tag="news")) # "[news] hello"
copy

bytes and bytearray for Binary Data

Text uses str and holds Unicode characters. Binary data uses bytes or bytearray and holds raw byte values 0-255.

123456789
# Creating binary data b1 = b"hello" # bytes literal b2 = bytes([72, 105]) # b"Hi" buf = bytearray(b"abc") # mutable buf[0] = 65 # now b"Abc" print("b1:", b1, type(b1)) # b'hello' <class 'bytes'> print("b2:", b2, type(b2)) # b'Hi' <class 'bytes'> print("buf:", buf, type(buf)) # bytearray(b'Abc') <class 'bytearray'>
copy

Coverting Text and Bytes: Encode and Decode

1234567
text = "cafΓ©" data = text.encode("utf-8") # to bytes back = data.decode("utf-8") # back to str print("text:", text, type(text)) # cafΓ© <class 'str'> print("data:", data, type(data)) # b'caf\xc3\xa9' <class 'bytes'> print("back:", back, type(back)) # cafΓ© <class 'str'>
copy

Mixing Text and Bytes - Invalid without Conversion

123456789
# Non-valid operation with explicit error print try: bad = b"ID:" + "123" # bytes + str - not allowed except TypeError as e: print("TypeError when mixing bytes and str:", e) # Correct combination ok = b"ID:" + "123".encode("utf-8") print("combined bytes:", ok) # b'ID:123'
copy

Lengths can differ

123
ch = "Γ©" print("len('Γ©') as str:", len(ch)) # 1 character print("len('Γ©' encoded):", len(ch.encode("utf-8")))# 2 bytes
copy

Files

# Binary files yield bytes
# with open("example.png", "rb") as f:
#     blob = f.read()

1. Which check correctly detects a missing value?

2. Which line correctly combines text with a bytes prefix?

3. Which statement is correct?

question mark

Which check correctly detects a missing value?

Select the correct answer

question mark

Which line correctly combines text with a bytes prefix?

Select the correct answer

question mark

Which statement is correct?

Select the correct answer

Everything was clear?

How can we improve it?

Thanks for your feedback!

SectionΒ 4. ChapterΒ 3

Ask AI

expand

Ask AI

ChatGPT

Ask anything or try one of the suggested questions to begin our chat

Suggested prompts:

Can you explain when to use `None` versus other falsey values?

How do I safely handle default values when `0` or `""` are valid?

Can you show more examples of converting between text and bytes?

bookNone and Binary Data

Swipe to show menu

Real programs often deal with missing values and raw binary data. Use None to represent the absence of a value, and bytes or bytearray to handle binary content from files or networks. Learn when to use each and how to safely convert between text and bytes.

None for "No Value"

None is a single special object that means "nothing here".

12345678910111213
# Basic checks result = None email = None print("result is None:", result is None) # True print("email is None:", email is None) # True # Identity checks are the reliable way if result is None: print("No result yet") if email is not None: print("Email present") else: print("Email missing")
copy

None is falsey, but so are 0 and "". Prefer is None when you truly mean "missing".

123
value = 0 print("not value:", not value) # True - but 0 is a valid value print("value is None:", value is None) # False - correctly distinguishes 0 from missing
copy

Defaults and Fallbacks

1234567891011
x = None safe_or = x or "unknown" # replaces any falsey value safe_none_only = "unknown" if x is None else x print("x=None, x or 'unknown':", safe_or) # 'unknown' print("x=None, None-only fallback:", safe_none_only) # 'unknown' x = 0 safe_or = x or "unknown" safe_none_only = "unknown" if x is None else x print("x=0, x or 'unknown':", safe_or) # 'unknown' - maybe not desired print("x=0, None-only fallback:", safe_none_only) # 0 - preserves valid zero
copy

Functions and Parameters

12345678910111213
def find_user(name): # returns None if not found return None def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" user = find_user("Ada") print("user is None:", user is None) # True print(add_tag("hello")) # "[general] hello" print(add_tag("hello", tag="news")) # "[news] hello"
copy

bytes and bytearray for Binary Data

Text uses str and holds Unicode characters. Binary data uses bytes or bytearray and holds raw byte values 0-255.

123456789
# Creating binary data b1 = b"hello" # bytes literal b2 = bytes([72, 105]) # b"Hi" buf = bytearray(b"abc") # mutable buf[0] = 65 # now b"Abc" print("b1:", b1, type(b1)) # b'hello' <class 'bytes'> print("b2:", b2, type(b2)) # b'Hi' <class 'bytes'> print("buf:", buf, type(buf)) # bytearray(b'Abc') <class 'bytearray'>
copy

Coverting Text and Bytes: Encode and Decode

1234567
text = "cafΓ©" data = text.encode("utf-8") # to bytes back = data.decode("utf-8") # back to str print("text:", text, type(text)) # cafΓ© <class 'str'> print("data:", data, type(data)) # b'caf\xc3\xa9' <class 'bytes'> print("back:", back, type(back)) # cafΓ© <class 'str'>
copy

Mixing Text and Bytes - Invalid without Conversion

123456789
# Non-valid operation with explicit error print try: bad = b"ID:" + "123" # bytes + str - not allowed except TypeError as e: print("TypeError when mixing bytes and str:", e) # Correct combination ok = b"ID:" + "123".encode("utf-8") print("combined bytes:", ok) # b'ID:123'
copy

Lengths can differ

123
ch = "Γ©" print("len('Γ©') as str:", len(ch)) # 1 character print("len('Γ©' encoded):", len(ch.encode("utf-8")))# 2 bytes
copy

Files

# Binary files yield bytes
# with open("example.png", "rb") as f:
#     blob = f.read()

1. Which check correctly detects a missing value?

2. Which line correctly combines text with a bytes prefix?

3. Which statement is correct?

question mark

Which check correctly detects a missing value?

Select the correct answer

question mark

Which line correctly combines text with a bytes prefix?

Select the correct answer

question mark

Which statement is correct?

Select the correct answer

Everything was clear?

How can we improve it?

Thanks for your feedback!

SectionΒ 4. ChapterΒ 3
some-alt