이메일 템플릿을 생성하는 파이썬 스크립트를 작성 중 문제가 생겼어요. 코드는 대략 이렇게 생겼어요:
def generate_email():
return """
Hello User,
Your account will be deactivated soon.
Please update your information to continue using our service.
Regards,
Customer Care Team
"""
print(generate_email())
겉보기엔 아무 문제 없어 보이죠? 하지만 출력 결과를 확인한 순간... 👀
Hello User,
Your account will be deactivated soon.
Please update your information to continue using our service.
Regards,
Customer Care Team
어라? 🤔 원래 기대한 결과는 이랬어야 했는데요:
Hello User,
Your account will be deactivated soon.
Please update your information to continue using our service.
Regards,
Customer Care Team
❗️ 문제의 원인: 삼중 따옴표(""")의 함정
파이썬에서 삼중 따옴표(""")로 감싼 문자열은 그 안의 들여쓰기(Indentation) 를 그대로 유지합니다.
그래서 함수 내부에 문자열을 작성하면, 함수의 들여쓰기까지 문자열에 포함되어버리죠. 결과적으로 각 줄 앞에 불필요한 공백이 생기는 것입니다.
✅ 해결 방법: dedent()의 마법
이 문제를 해결하기 위해 수동으로 공백을 지웠다면… 오늘부터는 더 쉽고 깔끔한 방법을 사용하세요!
바로, textwrap 모듈의 dedent() 함수를 활용하는 것입니다.
💡 수정된 코드:
from textwrap import dedent
def generate_email():
return dedent("""
Hello User,
Your account will be deactivated soon.
Please update your information to continue using our service.
Regards,
Customer Care Team
""")
print(generate_email())
🎯 결과:
Hello User,
Your account will be deactivated soon.
Please update your information to continue using our service.
Regards,
Customer Care Team
와우! 🤩 불필요한 공백 없이 깔끔한 결과가 출력됩니다.
📌 dedent()란?
dedent()는 여러 줄로 된 문자열의 앞부분 공백을 자동으로 제거하는 함수입니다.
코드의 들여쓰기는 유지하면서도, 출력 결과는 깔끔하게 만들 수 있죠.
textwrap은파이썬 표준 라이브러리에 포함되어 있기 때문에따로 설치할 필요가 없습니다.
그냥 아래와 같이 바로 import 해서 사용하면 됩니다:
from textwrap import dedent
def generate_message():
return dedent("""
Hello there,
This message is formatted correctly!
Have a great day!
""")
print(generate_message())
✅추가 정보:
파이썬 2.7 이상또는파이썬 3.x버전에서는 기본적으로 포함되어 있습니다.
만약 ModuleNotFoundError가 발생한다면, 파이썬 환경 설정에 문제가 있을 수 있습니다. 이 경우에는 가상 환경 설정을 다시 확인해보세요.
🔥 dedent()가 유용한 상황들
1️⃣ SQL 쿼리 작성 시
query = dedent("""
SELECT name, email
FROM customers
WHERE is_active = TRUE
ORDER BY created_at DESC;
""")
2️⃣ 로그 메시지 포맷팅 시
log_message = dedent("""
[WARNING] Disk space is running low!
Please clear unnecessary files to avoid system issues.
""")
3️⃣ HTML, Markdown, 이메일 템플릿 생성 시
html = dedent("""
<html>
<body>
<h2>Thank You for Registering!</h2>
<p>Your account has been successfully created.</p>
</body>
</html>
""")
4️⃣ 긴 Docstring 작성 시
def process_data():
"""
This function processes raw data from various sources.
It cleans, transforms, and prepares the data for analysis.
"""
pass
🎯 마무리: 알고 나면 너무 쉬운 dedent()
지금까지 오랜기간 동안 파이썬을 사용했지만, 이 작은 팁을 모르고 있었어요. print할때 여백을 맞추기 위 밑의 코드처럼 사용했었는데요.
def generate_email():
return """
Hello User,
Your account will be deactivated soon.
Please update your information to continue using our service.
Customer Care Team
"""
print(generate_email())