Podrías hacerlo mejor con esta verificación:
>>> import unicodedata
>>> unicodedata.category("'").startswith("P")
True
>>> unicodedata.category("’").startswith("P")
True
Las categorías Unicode P * son específicamente para puntuación :
conector (Pc), guión (Pd), comilla inicial (Pi), comilla final (Pf), abrir (Ps), cerrar (Pe), otro (Po)
Para preparar la colección exhaustiva, que luego puede usar para verificaciones de membresía rápidas, use una comprensión establecida:
>>> import sys
>>> from unicodedata import category
>>> codepoints = range(sys.maxunicode + 1)
>>> punctuation = {c for i in codepoints if category(c := chr(i)).startswith("P")}
>>> "'" in punctuation
True
>>> "’" in punctuation
True
La expresión de asignación aquí requiere Python 3.8+, equivalente para versiones anteriores de Python:
chrs = (chr(i) for i in range(sys.maxunicode + 1))
punctuation = set(c for c in chrs if category(c).startswith("P"))
Tenga en cuenta que algunos de los otros caracteres en string.punctuation
realidad están en la categoría Unicode Símbolo . Es fácil agregarlos también si lo desea.