string literals

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Daikoku
User
Beiträge: 66
Registriert: Montag 20. April 2015, 21:14

Hallo,

ich hätte zwei kurze Frage. Zuerst einmal ein Code Snippet:

Code: Alles auswählen

a = '  Hallo\nUwe '
print('=> type(a)={} and len(a)={}:'.format(type(a), len(a)))
print('1.:', '>{}<'.format(a))
print('2.:', '>{}<'.format(' '.join(a.split())))
print('-' *40)

a = r'  Hallo\nUwe '
print('=> type(a)={} and len(a)={}:'.format(type(a), len(a)))
print('3.:', '>{}<'.format(a))
print('4.:', '>{}<'.format(' '.join(a.split())))
print('-' * 40)

import codecs
c = codecs.decode(a, 'unicode_escape')
print('=> type(c)={} and len(c)={}:'.format(type(c), len(c)))
print('5.:', '>{}<'.format(' '.join(c.split())))
Ausgabe:

[codebox=text file=Unbenannt.txt]
=> type(a)=<class 'str'> and len(a)=12:
1.: > Hallo
Uwe <
2.: >Hallo Uwe<
----------------------------------------
=> type(a)=<class 'str'> and len(a)=13:
3.: > Hallo\nUwe <
4.: >Hallo\nUwe<
----------------------------------------
=> type(c)=<class 'str'> and len(c)=12:
5.: >Hallo Uwe<
[/code]

Meine Fragen:

Ich benutze Python 3.6.2.

1. Wie kann ich herausfinden, ob ein Objekt ein normaler oder ein raw string ist ?
typ() führt jeweils zu den gleichen Ergebnissen, aber ' '.join(a.split()) erzeugt, erwartbar sehr unterschiedliche Ausgaben.
Um jeweils zu einem gleichen Ergebnis zu kommen, müsste ich also vorher Wissen, um welche Art von Objekt es sich handelt, aber wie mache ich das ?

2. Um einen raw string wieder in einen normalen string zu konvertieren, ist mir nur codecs.decode() eingefallen. Gibt es eine bessere Lösung ?

Vielen Dank
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es gibt keine raw String Objekte. Es gibt sie nur als literale. Sie erlauben dir beim schreiben von code auf Escspes zu verzichten. Intern sind sie aber immer ununterscheidbar weil eben einfach ein String.
Antworten