In Unicode, control characters general category is 'Cc', even if they have no name.unicodedata.category()
returns the general category, as you can test for yourself in the python console :
>>>unicodedata.category(unicode('0'))
'Cc'
For commas and quotation marks, the categories are Pi and Pf.
You only test the first character of the returned code in your example, so try instead :
cat = unicodedata.category(ch)
if cat == "Cc" or cat == "Pi" or cat == "Pf":
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…