@Ghoul475

Почему rpy не читает скрипт?

я написал такой код на rpy
#
init -3200 python:
  import os
  blpi_path = (rf"/Users/{os.getlogin()}/Library/Application Support/Steam/steamapps/workshop/content/331470/508932099/escs/")

  def get_directories(dir_path):
    directories = []
    dir_files = os.listdir(dir_path)
    for dir_file in dir_files:
      dir = dir_path + dir_file
      if os.path.isdir(dir):
        directory = {
          "path": dir + "/",
          "name": dir_file,
        }
        directories.append(directory)
    return directories
  
  def get_files(dir_path):
    files = []
    dir_files = os.listdir(dir_path)
    for dir_file in dir_files:
      file_path = dir_path + dir_file
      if os.path.isfile(file_path):
        renpy_file = file_path.replace(blpi_path, "escs/", 1)
        file = {
          "path": renpy_file,
          "name": os.path.splitext(dir_file)[0]
        }
        files.append(file)
    return files


Но мне выдает ошибку
```
I'm sorry, but errors were detected in your script. Please correct the
errors listed below, and try again.
File "/Users/belikovmichael/Library/Application Support/Steam/steamapps/workshop/content/331470/508932099/escs/scripts/images/python/folder_files_handlers.rpy", line 3: invalid syntax
    blpi_path = (rf"/Users/{os.getlogin()}/Library/Application Support/Steam/steamapps/workshop/content/331470/508932099/escs/")
                                                                                                                               ^
    

Ren'Py Version: Ren'Py 7.4.11.2266
Sat Oct  8 04:44:44 2022
```
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Ошибка именно в синтаксисе и именно от незнания синтаксиса Python.
Дело в том, что скобки в Python - не просто скобки. Это литералы. Круглые скобки - это литерал последовательности tuple, т.е. кортежа. Кортеж непременно должен содержать разделитель - запятую.
У вас my_tuple = (rf"first element") - это невалидная запись.
Должно быть так:
my_tuple = (rf"first element", )
Или так:
my_string = rf"first element" если вы хотите получить просто строку.

Но, поскольку вы хотели в действительности получить путь к вашей папке, я бы использовал библиотеку pathlib и сделал бы как-то так:
from pathlib import Path

def get_folders(source_path: Path):
    return [item for item in source_path.iterdir() if item.is_dir()]
    
def get_files(source_path: Path):
    return [item for item in source_path.iterdir() if item.is_file()]


my_home = Path.home()
my_path = 'Library/Application Support/Steam/steamapps/workshop/content/331470/508932099/escs/'

blpi_path = my_home / my_path

print(f'folders:\n{get_folders(blpi_path)}\n')
print(f'files:\n{get_files(blpi_path)}\n')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Навскидку - проблема в f-строке.
Так уж вышло, что движок, до версии 8.0* работал с python 2.7, в то время как строки появились в 3.6.
* - В патчноутах указано:
Adds support for Python 3, which is recommended for all new games.

Что может значить как полную поддержку, так и на уровне древних версий.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы