Python Forum

Full Version: How to correct the error?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
z = '346 + 324 - 368'
z.split('+', '-')
Error:
Traceback (most recent call last):   File "<pyshell#17>", line 1, in <module>     z.split('+', '-') TypeError: 'str' object cannot be interpreted as an integer
split() don't work multiple delimiters.
You can use re.spilt().
>>> import re

>>> z = '346 + 324 - 368'
>>> re.split(r'\W+', z)
['346', '324', '368']
>>> '  '.join(re.split(r'\W+', z))
'346 324 368'
\W+ matches any non-word character (equal to [^a-zA-Z0-9_])
Adding to the previous answer and explaining the error.
split can be passed two arguments,
  1. a string that indicates where to split
  2. a int specifying the maximum allowed times to split
so the error you have is because the second argument that was expected to be an int was actually a str '-'.

If the string in question is always formatted as shown and you are only interested in getting the numbers without using re
z = '346 + 324 - 368'
z.split()[::2]
Output:
['346', '324', '368']
a non regex method using string methods....
>>> z = '346 + 324 - 368'
>>> x = z.maketrans('+-','..')
>>> x
{43: 46, 45: 46}
>>> y = z.translate(x).split('.')
>>> y
['346 ', ' 324 ', ' 368']
of course at this point its a list and each string is not separate by one single space
>>> a = list(map(str.strip, y))
>>> a
['346', '324', '368']
>>> ' '.join(a)
'346 324 368'
This would not matter of exact format as something like this
z = '346 + 324 - 368 - 368 + 368 + 368 -45 -56- 368'
would still split to this
346 324 368 368 368 368 45 56 368
Using python3.x otherwise you have to import string and convert maketrans line to.... string.maketrans('+-','..')