Почему это работает в IDE, но не в командной строке?

Код обращается к доске объявлений и индексирует/отчитывается по самым популярным темам. Используя WING IDE, он работает нормально и не сообщает об ошибках. Однако при запуске через командную строку он выдает ошибку, говоря, что не может правильно закодировать символ. Это первый раз, когда я вижу это и не нашел хорошего ресурса, чтобы это исправить.

Поскольку он отлично работает в WING, я не уверен, что еще добавить в код, чтобы предотвратить возникновение этой проблемы в командной строке.

import requests

from bs4 import BeautifulSoup

url = raw_input("Enter the board URL: ")

print "\n"

#send the HTTP request
response = requests.get(url)

if response.status_code == 200:

    #pull the content
    html_content = response.content

    #send the page to BeautifulSoup
    html_doc = BeautifulSoup(html_content, "html.parser")

    #extract topic data
    topic_spider = html_doc.find_all("span",{"class":"subject"})
    data = []
    for topic in topic_spider:
        if topic.text!='':
            data.append(topic.text)
    topiclist = list(dict.fromkeys(data))
    topiclist.sort(reverse=False)
    for item in topiclist:
        print ('[*] ' + item)

WING работает нормально, без ошибок. Через CMD после нескольких успешных результатов возникает следующий результат:

[*] Parenting (successful result)
Traceback (most recent call last):
  File "D:\xxxx\topicindexer.py", line 29, in <module>
    print ('[*] ' + item)
  File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2019' in position 31: character maps to <undefined>

Я понимаю, что он говорит. Чего я не понимаю, так это правильного способа исправить это.

OutlawBandit 04.05.2019 03:54

Не используйте умные кавычки. CMD по умолчанию является кодовой страницей OEM. Программа для вашей среды.

Noodles 04.05.2019 04:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
807
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Убедитесь, что среда Python в CMD и Wing одинакова. Установите переменные среды в Wing IDE в CMD.

Похоже, ваш код написан на Python 3, но по умолчанию установлен Python 2.

При запуске кода в CMD просто добавьте python3 myfile.py, а не просто python myfile.py

Ответ принят как подходящий

Я отмечаю две вещи.

Во-первых, вы используете операторы печати, подобные этому

print ('[*] ' + item)

что указывает на то, что вы используете python 3.x

Во-вторых, ваш вывод cmd использует python 2.7. Похоже, это твоя проблема. Попробуйте python3 filename.py в командной строке вместо python filename.py, так как это то, что по умолчанию используется, когда вы оба установили.

Посмотрите, решит ли это это раньше всего.

Я взял эту идею из другого поста, так что мне плохо за то, что я использовал здесь неправильный синтаксис. Я установил обновленный Python 3.x, но ему по-прежнему не нравится команда python3: *** 'python3' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл. *** Невозможно удалить python3 сейчас, так что теперь он сломался, потому что он ожидает 3,0 повсюду. хммм

OutlawBandit 04.05.2019 04:32

Наличие нескольких установленных версий Python может привести к беспорядку, лично я бы посоветовал просто удалить 2.7, если он вам не нужен. Затем полностью переустановите последнюю версию 3.x, обязательно установите флажок, который добавляет вещи в переменную PATH в установщике и все такое. Таким образом, python3 должен просто работать под командой python вместо python3.

ch4rl1e97 04.05.2019 04:35

Я буду следить за этим как можно скорее. Я прохожу курс, который использует 2.7, поэтому синтаксис устарел. Я понимаю, что это позади; Я просто пытался придерживаться материала курса. Попробую переписать, а там посмотрим.

OutlawBandit 04.05.2019 04:37

Звучит хорошо, я должен идти, так что удачи вам, между ними не так уж много критических различий с точки зрения синтаксиса для большинства вещей, просто не забудьте заключить в скобки свои отпечатки, и вы будете в порядке на 99%. Документы BeautifulSoup4 отмечают, что функции модуля в основном одинаковы для 2.7 и 3.x, поэтому вы должны быть в порядке, используя это.

ch4rl1e97 04.05.2019 04:41

Удалил неиспользуемую версию... Вот что странно. Если я перехожу в свою учетную запись администратора на этой машине, все работает нормально... Но возвращаясь к моей обычной учетной записи пользователя, она ломается так же (даже при запуске CMD в качестве администратора). Это новое для меня, но я собираюсь списать это на что-то странное в окружающей среде.

OutlawBandit 05.05.2019 20:37

Похоже, что-то было установлено только под пользователем-администратором, а не под вашим, я думаю, что pip по умолчанию устанавливает только в определенных местах, например (например, для каждого пользователя, если он не был запущен от имени администратора) в зависимости от того, как вы его запускаете. Раздражающая часть Python. Я думаю, что вы, вероятно, правы в части среды, хотя я недостаточно осведомлен, чтобы рассказать вам, как это исправить, не удаляя все это полностью из каждой учетной записи пользователя и переустанавливая :(

ch4rl1e97 08.05.2019 02:12

Другие вопросы по теме