Empty separator python ошибка

TLDR:
If you don’t specify a character for str.split to split by, it defaults to a space or tab character. My error was due to the fact that I did not have a space between my quotes.


In case you were wondering, the separator I specified is a space:

words = stuff.split(" ")

The string in question is This is an example of a question.
I also tried # as the separator and put #‘s into my sentence and got the same error.

Edit: Here is the complete block

def break_words(stuff):
"""This function will break up words for us."""
    words = stuff.split(" ")
    return words
sentence = "This is an example of a sentence."
print break_words(sentence)

When I run this as py file, it works.
but when I run the interpreter, import the module, and type:
sentence = "This is an example of a sentence."
followed by print break_words(sentence)

I get the above mentioned error.

And yes, I realise that this is redundant, I’m just playing with functions.

Edit 2: Here is the entire traceback:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ex25.py", line 6, in break_words
words = stuff.split(' ')

Edit 3: Well, I don’t know what I did differently, but when I tried it again now, it worked:

>>> s = "sdfd dfdf ffff"
>>> ex25.break_words(s)
['sdfd', 'dfdf', 'ffff']
>>> words = ex25.break_words(s)
>>>

As you can see, no errors.

If you pass an empty string to the str.split() method, you will raise the ValueError: empty separator. If you want to split a string into characters you can use list comprehension or typecast the string to a list using list().

def split_str(word):
    return [ch for ch in word]

my_str = 'Python'

result = split_str(my_str)
print(result)

This tutorial will go through the error in detail with code examples.


Table of contents

  • Python ValueError: empty separator
  • Example #1: Split String into Characters
    • Solution #1: Use list comprehension
    • Solution #2: Convert string to a list
  • Example #2: Split String using a Separator
    • Solution
  • Summary

Python ValueError: empty separator

In Python, a value is information stored within a particular object. We will encounter a ValueError in Python when we use an operation or function that receives an argument with the right type but an inappropriate value.

The split() method splits a string into a list. We can specify the separator, and the default is whitespace if we do not pass a value for the separator. In this example, an empty separator "" is an inappropriate value for the str.split() method.

Example #1: Split String into Characters

Let’s look at an example of trying to split a string into a list of its characters using the split() method.

my_str = 'research'

chars = my_str.split("")

print(chars)

Let’s run the code to see what happens:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [7], in <cell line: 3>()
      1 my_str = 'research'
----> 3 chars = my_str.split("")
      5 print(chars)

ValueError: empty separator

The error occurs because did not pass a separator to the split() method.

Solution #1: Use list comprehension

We can split a string into a list of characters using list comprehension. Let’s look at the revised code:

my_str = 'research'

chars = [ch for ch in my_str]

print(chars)

Let’s run the code to get the list of characters:

['r', 'e', 's', 'e', 'a', 'r', 'c', 'h']

Solution #2: Convert string to a list

We can also convert a string to a list of characters using the built-in list() method. Let’s look at the revised code:

my_str = 'research'

chars = list(my_str)

print(chars)

Let’s run the code to get the result:

['r', 'e', 's', 'e', 'a', 'r', 'c', 'h']

Example #2: Split String using a Separator

Let’s look at another example of splitting a string.

my_str = 'research is fun'

list_of_str = my_str.split("")

print(list_of_str)

In the above example, we want to split the string by the white space between each word. Let’s run the code to see what happens:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [10], in <cell line: 3>()
      1 my_str = 'research.is.fun'
----> 3 list_of_str = my_str.split("")
      5 print(list_of_str)

ValueError: empty separator

The error occurs because "" is an empty separator and does not represent white space.

Solution

We can solve the error by using the default value of the separator, which is white space. We need to call the split() method without specifying an argument to use the default separator. Let’s look at the revised code:

my_str = 'research is fun'

list_of_str = my_str.split()

print(list_of_str)

Let’s run the code to see the result:

['research', 'is', 'fun']

Summary

Congratulations on reading to the end of this tutorial!

For further reading on Python ValueErrors, go to the articles:

  • How to Solve Python ValueError: year is out of range
  • How to Solve Python ValueError: dictionary update sequence element #0 has length N; 2 is required

To learn more about Python for data science and machine learning, go to the online courses page on Python for the most comprehensive courses available.

Have fun and happy researching!

Что такое хороший способ сделать some_string.split('') в python? Этот синтаксис дает ошибку:

a = '1111'
a.split('')

ValueError: empty separator

Я хотел бы получить:

['1', '1', '1', '1']

Ответ 1

Используйте list():

>>> list('1111')
['1', '1', '1', '1']

В качестве альтернативы вы можете использовать map():

>>> map(None, '1111')
['1', '1', '1', '1']

Разница во времени:

$ python -m timeit "list('1111')"
1000000 loops, best of 3: 0.483 usec per loop
$ python -m timeit "map(None, '1111')"
1000000 loops, best of 3: 0.431 usec per loop

Ответ 2

Можно напрямую записывать строки для

>>> list('1111')
['1', '1', '1', '1']

или использования списков

>>> [i for i in '1111']
['1', '1', '1', '1']

второй способ может быть полезен, если вы хотите разделить строки на подстроки длиной более 1 символа

>>> some_string = '12345'
>>> [some_string[i:i+2] for i in range(0, len(some_string), 2)]
['12', '34', '5']

Ответ 3

Строки являются итерабельными и могут быть проиндексированы, поэтому вам совсем не нужно разделить его:

>>> for char in '11111':
...   print char
... 
1
1
1
1
1
>>> '11111'[4]
'1'

Вы можете «разбить» его на вызов в список, но это не имеет большого значения:

>>> for char in list('11111'):
...   print char
... 
1
1
1
1
1
>>> list('11111')[4]
'1'

Поэтому вам нужно сделать это, только если ваш код явно ожидает список. Например:

>>> list('11111').append('2')
>>> l = list('11111')
>>> l.append(2)
>>> l
['1', '1', '1', '1', '1', 2]

Это не работает с прямой строкой:

>>> l.append('2')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'append'

В этом случае вам понадобится:

>>> l += '2'
>>> l
'111112'

Ответ 4

Метод # 1:

s="Amalraj"
l=[i for i in s]
print(l)

Вывод:

['A', 'm', 'a', 'l', 'r', 'a', 'j']

Способ №2:

s="Amalraj"
l=list(s)
print(l)

Вывод:

['A', 'm', 'a', 'l', 'r', 'a', 'j']

Способ № 3:

import re; # importing regular expression module
s="Amalraj"
l=re.findall('.',s)
print(l)

Вывод:

['A', 'm', 'a', 'l', 'r', 'a', 'j']

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account


Closed

upworkap opened this issue

Mar 2, 2020

· 1 comment

Comments

@upworkap

Is it possible to use scrapy shell and paste non-ascii characters?
I think it is related to IPython.

@nyov

2 participants

@nyov

@upworkap

TLDR : Если вы не указываете символ для str.split для разделения, по умолчанию используется пробел или символ табуляции. Моя ошибка была связана с тем, что между моими цитатами не было пробела.


В случае, если вам интересно, указанный мной разделитель является пробелом:

words = stuff.split(" ")

Строка в вопросе This is an example of a question. Я также попробовал # в качестве разделителя и вставил # в мое предложение, и получил ту же ошибку.

Изменить. Вот полный блок

def break_words(stuff):
"""This function will break up words for us."""
    words = stuff.split(" ")
    return words
sentence = "This is an example of a sentence."
print break_words(sentence)

Когда я запускаю это как py-файл, он работает. но когда я запускаю интерпретатор, импортируйте модуль и введите: {{Х0}} затем print break_words(sentence)

Я получаю вышеупомянутую ошибку.

И да, я понимаю, что это избыточно, я просто играю с функциями.

Правка 2. Вот полный след.

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ex25.py", line 6, in break_words
words = stuff.split(' ')

Изменить 3: я не знаю, что я сделал по-другому, но когда я попробовал это снова сейчас, это сработало:

>>> s = "sdfd dfdf ffff"
>>> ex25.break_words(s)
['sdfd', 'dfdf', 'ffff']
>>> words = ex25.break_words(s)
>>>

Как видите, ошибок нет.

7 ответов

Лучший ответ

У вас была та же проблема в этом упражнении из «Питона на харвее». Я просто должен был поставить пробел между кавычками.

def breakWords(stuff):
    """this function will break up words."""
    words = stuff.split(" ")
    return words

Также, как кто-то упомянул, вы должны перезагрузить модуль. хотя в этом примере, поскольку с помощью командной строки в windows мне пришлось выйти (), затем перезапустить сеанс py и снова импортировать упражнение.


8

Sotos
30 Июн 2017 в 09:05

Как показано ниже в выводе отладчика, эта ошибка генерируется пустым параметром для разделения

>>> s="abc def ghi jkl"
>>> s.split(" ")
['abc', 'def', 'ghi', 'jkl']
>>> s.split("")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: empty separator
>>> 

Ваш код должен передавать пустое значение для разделения. Исправьте это, и ошибка исчезнет.


3

Vorsprung
29 Дек 2013 в 16:08

enter image description here


  1. Добавьте туда пробел: words = stuff.split(" ")

  2. Перезагрузите ваш переводчик


0

Eldad Assis
2 Июн 2016 в 07:30

Я получил проблему, похожую на ту же ошибку.

Но дело в том, что я пропустил пробел в функции split (» «). # Значение Ошибка: Пустой разделитель

Если вы вставите пробел между апострофами, ошибка будет исправлена


0

Kathiravan Natarajan
18 Май 2017 в 20:50

У меня была точно такая же проблема. Первоначальная ошибка произошла из-за пустого разделителя », который я забыл вставить в него. После того, как вы изменили код, вам нужно выйти из Python, а затем перезапустить Python и импортировать ex25. Это будет работать. Если вы не выходите из Python и просто импортируете код снова, он не будет работать. Или самый простой способ — перезагрузить (ex25), тогда это решит проблему. Надеюсь, что это может помочь


0

cansdmz
10 Фев 2017 в 21:36

Вам определенно не нужны кавычки в скобках.

sentence = "bla mla gla dla"
sentence.split()

Дам тебе

[‘bla’, ‘mla’, ‘gla’, ‘dla’]

В результате по умолчанию.


0

diamind
15 Июл 2019 в 02:40

У меня была та же проблема, когда я учился по книге — изучать Python трудным путем,

Удаление 2 апостроф («») решило проблему для меня.

Words = stuff.split () # удаление апострофов устраняет ошибку


0

Alex
8 Мар 2017 в 08:34

Ulrich Eckhardt


  • #1

Hi!

«‘abc’.split(»)» gives me a «ValueError: empty separator».
However, «».join([‘a’, ‘b’, ‘c’])» gives me «‘abc'».

Why this asymmetry? I was under the impression that the two would be
complementary.

Uli

Advertisements

Vlastimil Brom


  • #2

2009/9/15 Ulrich Eckhardt said:

Hi!

«‘abc’.split(»)» gives me a «ValueError: empty separator».
However, «».join([‘a’, ‘b’, ‘c’])» gives me «‘abc'».

Why this asymmetry? I was under the impression that the two would be
complementary.

Uli

maybe it isn’t quite obvious, what the behaviour in this case should be;
re.split also works with empty delimiter (and returns the original string)[‘abcde’]

If you need to split the string into the list of single characters
like in your example, list() is the possible way:

list(«abcde») [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]

vbr

Dave Angel


  • #3

Ulrich said:

Hi!

«‘abc’.split(»)» gives me a «ValueError: empty separator».
However, «».join([‘a’, ‘b’, ‘c’])» gives me «‘abc'».

Why this asymmetry? I was under the impression that the two would be
complementary.

Uli

I think the problem is that join() is lossy; if you try «».join([‘a’,
‘bcd’, ‘e’]) then there’s no way to reconstruct the original list with
split(). Now that can be true even with actual separators, but perhaps
this was the reasoning.

Anyway, if you want to turn a string into a list of single-character
strings, then use
list(«abcde»)

DaveA

jeffunit


  • #4

I wrote a program that diffs files and prints out matching file names.
I will be executing the output with sh, to delete select files.

Most of the files names are plain ascii, but about 10% of them have unicode
characters in them. When I try to print the string containing the name, I get
an exception:

‘ascii’ codec can’t encode character ‘udce9’
in position 37: ordinal not in range(128)

The string is:

‘./Julio_Iglesias-Un_Hombre_Solo-05-Quudce9_no_se_rompa_la_noche.mp3’

This is on a windows xp system, using python 3.1 which I compiled
with the cygwin
linux compatability layer tool.

Can you tell me what encoding I need to print udce9 and how to set python to
that encoding mode?

thanks,
jeff

MRAB


  • #5

Vlastimil said:

2009/9/15 Ulrich Eckhardt said:

Hi!

«‘abc’.split(»)» gives me a «ValueError: empty separator».
However, «».join([‘a’, ‘b’, ‘c’])» gives me «‘abc'».

Why this asymmetry? I was under the impression that the two would be
complementary.

Uli

maybe it isn’t quite obvious, what the behaviour in this case should be;
re.split also works with empty delimiter (and returns the original string)[‘abcde’]

If you need to split the string into the list of single characters
like in your example, list() is the possible way:[‘a’, ‘b’, ‘c’, ‘d’, ‘e’]

I’d prefer it to split into characters. As for re.split, there are times
when it would be nice to be able to split on a zero-width match such as
r»b» (word boundary).

Advertisements

Hendrik van Rooyen


  • #6

«‘abc’.split(»)» gives me a «ValueError: empty separator».
However, «».join([‘a’, ‘b’, ‘c’])» gives me «‘abc'».

Why this asymmetry? I was under the impression that the two would be
complementary.

I’m not sure about asymmetry, but how would you implement a split method
with an empty delimiter to begin with? It doesn’t make much sense anyway.

I fell into this trap some time ago too.
There is no such string method.

The opposite of «».join(aListOfChars) is
list(aString)

— Hendrik

Advertisements

TLDR : Если вы не указываете символ для str.split для разделения, по умолчанию используется пробел или символ табуляции. Моя ошибка была связана с тем, что между моими цитатами не было пробела.


В случае, если вам интересно, указанный мной разделитель является пробелом:

words = stuff.split(" ")

Строка в вопросе This is an example of a question. Я также попробовал # в качестве разделителя и вставил # в мое предложение, и получил ту же ошибку.

Изменить. Вот полный блок

def break_words(stuff):
"""This function will break up words for us."""
    words = stuff.split(" ")
    return words
sentence = "This is an example of a sentence."
print break_words(sentence)

Когда я запускаю это как py-файл, он работает. но когда я запускаю интерпретатор, импортируйте модуль и введите: {{Х0}} затем print break_words(sentence)

Я получаю вышеупомянутую ошибку.

И да, я понимаю, что это избыточно, я просто играю с функциями.

Правка 2. Вот полный след.

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ex25.py", line 6, in break_words
words = stuff.split(' ')

Изменить 3: я не знаю, что я сделал по-другому, но когда я попробовал это снова сейчас, это сработало:

>>> s = "sdfd dfdf ffff"
>>> ex25.break_words(s)
['sdfd', 'dfdf', 'ffff']
>>> words = ex25.break_words(s)
>>>

Как видите, ошибок нет.

7 ответов

Лучший ответ

У вас была та же проблема в этом упражнении из «Питона на харвее». Я просто должен был поставить пробел между кавычками.

def breakWords(stuff):
    """this function will break up words."""
    words = stuff.split(" ")
    return words

Также, как кто-то упомянул, вы должны перезагрузить модуль. хотя в этом примере, поскольку с помощью командной строки в windows мне пришлось выйти (), затем перезапустить сеанс py и снова импортировать упражнение.


8

Sotos
30 Июн 2017 в 09:05

Как показано ниже в выводе отладчика, эта ошибка генерируется пустым параметром для разделения

>>> s="abc def ghi jkl"
>>> s.split(" ")
['abc', 'def', 'ghi', 'jkl']
>>> s.split("")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: empty separator
>>> 

Ваш код должен передавать пустое значение для разделения. Исправьте это, и ошибка исчезнет.


3

Vorsprung
29 Дек 2013 в 16:08

enter image description here


  1. Добавьте туда пробел: words = stuff.split(" ")

  2. Перезагрузите ваш переводчик


0

Eldad Assis
2 Июн 2016 в 07:30

Я получил проблему, похожую на ту же ошибку.

Но дело в том, что я пропустил пробел в функции split (» «). # Значение Ошибка: Пустой разделитель

Если вы вставите пробел между апострофами, ошибка будет исправлена


0

Kathiravan Natarajan
18 Май 2017 в 20:50

У меня была точно такая же проблема. Первоначальная ошибка произошла из-за пустого разделителя », который я забыл вставить в него. После того, как вы изменили код, вам нужно выйти из Python, а затем перезапустить Python и импортировать ex25. Это будет работать. Если вы не выходите из Python и просто импортируете код снова, он не будет работать. Или самый простой способ — перезагрузить (ex25), тогда это решит проблему. Надеюсь, что это может помочь


0

cansdmz
10 Фев 2017 в 21:36

Вам определенно не нужны кавычки в скобках.

sentence = "bla mla gla dla"
sentence.split()

Дам тебе

[‘bla’, ‘mla’, ‘gla’, ‘dla’]

В результате по умолчанию.


0

diamind
15 Июл 2019 в 02:40

У меня была та же проблема, когда я учился по книге — изучать Python трудным путем,

Удаление 2 апостроф («») решило проблему для меня.

Words = stuff.split () # удаление апострофов устраняет ошибку


0

Alex
8 Мар 2017 в 08:34

Понравилась статья? Поделить с друзьями:
  • Empty grounds кофемашина jura ошибка
  • Empty data ошибка
  • Emps ошибка toyota
  • Empires and puzzles ошибка подключения прокси
  • Empire total war исправление ошибок