Python 2.6: ошибка «Не удалось открыть изображение»

Я пытаюсь создать базу для карты, которую я собираюсь использовать для игры, но я не могу загрузить изображение на экран. Я попытался отправить абсолютный путь к изображению с помощью случая с письмом, я попытался изменить имя изображения, я попробовал загружать разные изображения, которые работали в других программах, которые я сделал, и я попытался поставить изображение в том же каталоге, что и сам сценарий. Пока ничего не получилось. Я посмотрел на несколько потоков людей, у которых была такая же проблема, например, почему мои изображения pygame не загружаются? и я не могу найти ответ на свою проблему. Изображение не загружается. Вот код:

import sys, pygame from pygame.locals import * pygame.init() size = (600, 400) screen = pygame.display.set_mode(size) pygame.display.set_caption("Practice Map") walls = pygame.image.load("C:\Users\dylan\Desktop\Practice Game\brick.jpg") x = 0 y = 0 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() if event.type == KEYDOWN and event.key == K_ESCAPE: sys.exit() if event.type == KEYDOWN and event.key == K_UP: y -= 20 if event.type == KEYDOWN and event.key == K_DOWN: y += 20 if event.type == KEYDOWN and event.key == K_LEFT: x -= 20 if event.type == KEYDOWN and event.key == K_RIGHT: x += 20 screen.fill((0,0,0)) screen.blit(walls,(x, 330)) # more bricks to go here later pygame.display.flip() #end 

и ошибка:

 Traceback (most recent call last): File "C:\Users\dylan\Desktop\Practice Game\move.py", line 8, in <module> walls = pygame.image.load("C:\Users\dylan\Desktop\Practice Game\brick.jpg") error: Couldn't open C:\Users\dylan\Desktop\Practice Gamerick.jpg 

Я использую Python 2.6 с PyGame 1.9 для Python версии 2.6 с IDLE в качестве моего редактора.

3 Solutions collect form web for “Python 2.6: ошибка «Не удалось открыть изображение»”

Проблема здесь в том, что вы используете \ в качестве разделителя пути, но \ также используется как escape-символ в строках Python. В частности, \b означает «backspace» (или '\x08' ). Вы избегаете других обратных косых черт из-за не совсем документированного, но надежного поведения, которое неизвестные escape-последовательности, такие как \X , рассматриваются как обратная косая черта, за которыми следует X

Существует три решения:

  1. Используйте необработанную строку, что означает, что escape-строки в Python игнорируются: r"C:\Users\dylan\Desktop\Practice Game\brick.jpg" .
  2. "C:\\Users\\dylan\\Desktop\\Practice Game\\brick.jpg" обратной косой чертой: "C:\\Users\\dylan\\Desktop\\Practice Game\\brick.jpg" .
  3. Вместо этого используйте косые черты: "C:/Users/dylan/Desktop/Practice Game/brick.jpg" .

Если вы запомнили список управляющих последовательностей Python и готовы полагаться на функциональность, которая может измениться, но, вероятно, этого не произойдет, вы можете уйти с помощью только экранирования \b здесь, но должно быть понятно, почему остальные три лучшие идеи в долгосрочной перспективе.

В то время как имена путей Windows используют обратные косые разделители, все встроенные и стандартные библиотеки Python и большинство функций в сторонних библиотеках, с удовольствием разрешают использовать вместо них косые черты. (Это работает, потому что Windows не разрешает косые черты в пути вообще).

Чтобы понять, как и почему это работает, вы можете попробовать распечатать строки:

 >>> print "C:\Users\dylan\Desktop\Practice Game\brick.jpg" C:\Users\dylan\Desktop\Practice Gamrick.jpg >>> print r"C:\Users\dylan\Desktop\Practice Game\brick.jpg" C:\Users\dylan\Desktop\Practice Game\brick.jpg >>> print "C:\\Users\\dylan\\Desktop\\Practice Game\\brick.jpg" C:\Users\dylan\Desktop\Practice Game\brick.jpg >>> print "C:/Users/dylan/Desktop/Practice Game/brick.jpg" C:/Users/dylan/Desktop/Practice Game/brick.jpg 
 walls = pygame.image.load("C:\Users\dylan\Desktop\Practice Game\brick.jpg") 

Вам нужно избежать последнего \

 walls = pygame.image.load("C:\Users\dylan\Desktop\Practice Game\\brick.jpg") 

Изменить : Объяснение

Вам нужно сбежать на последнем \ потому что ab сразу после \ , а \b – escape-последовательность для backspace. Это удаляет символ перед последовательностью. Вот почему вам нужно избежать последней обратной косой черты.

Обратите внимание, что пути Windows используют разделители символов \ . Они также означают «escape» в строке Python.

Вместо этого попробуйте использовать необработанную строку:

 walls = pygame.image.load(r"C:\Users\dylan\Desktop\Practice Game\brick.jpg") 

(Обратите внимание на r" перед строкой.)

Interesting Posts

Как я могу отправить часть массива с разбросом?

Эмулировать цикл do-while в Python?

Как выполнить итерацию по двум словарям сразу и получить результат, используя значения и ключи от обоих

Порядок Django-mptt

Проект Python с использованием буферов протокола, проблемы с развертыванием

python urllib2 – подождите, пока страница закончит загрузку / перенаправление перед очисткой?

Значения диктата суммы Python на основе ключей

Как подключить HBase и Spark с помощью Python?

Захват нажатий клавиш для игры (python)

Как использовать пользовательские библиотеки и приложения python в Google App Engine?

API Soundcloud не возвращает все треки из плейлиста через Python

Как правильно использовать bind_proxy и ordering_list вместе с SQLAlchemy

Как изменить формат индекса Datetime (UTC) в Pandas?

Преобразование python long / int в массив байтов фиксированного размера

Поймать события «до / после вызова функции» для всех функций класса

Python - лучший язык программирования в мире.