PermissionError: (Errno 13) Quyền bị từ chối Python

Là người dùng mới, tôi chỉ có thể tải lên một ảnh chụp màn hình, tôi có một số ảnh chụp màn hình cần chia sẻ, vì vậy tôi đang chia sẻ ảnh chụp màn hình cho thấy tôi thực sự là Quản trị viên để có thể xác minh rằng tôi có các quyền quan trọng

Tôi đánh giá cao bạn [bất cứ ai] đã dành thời gian giúp tôi việc này, đặc biệt là gần những ngày lễ

Ảnh chụp màn hình Desktop 2023. 01. 01 - 20. 43. 10. 991364×768 103 KB

   # This is my tile.py 
import pygame
import csv
import os
from pytmx.util_pygame import load_pygame

import settings

tmx_data = load_pygame["G:/Tiled/Game Python Files/Adjusted TileSet for MapEditor/Maps/Kanto Tiled Map Files"]

#txtdata = load_pygame['G:/Tiled/Game Python Files/Adjusted TileSet for MapEditor/Text']

class Map:
   def __init__[self, filename]:
       self.data = []
       self.tilewidth = len[self.data[0]]
       self.tileheight = len[self.data]
       self.width = self.tilewidth * settings.TILESIZE
       self.height = self.tileheight * settings.TILESIZE


class Tile[pygame.sprite.Sprite]:
   def __init__[self, pos, surface]:
       super[].__init__[]
       self.image = surface
       self.rect = self.image.get_rect[topleft=pos]


for layer in tmx_data.visible_layers:

   if hasattr[layer, 'data']:
       for x, y, surface in layer.tiles[]:
           pos = [x * 16, y * 16]
           Tile[pos=pos, surface=surface]


class TiledMap:
   def __init__[self, filename]:
       tm = pytmx.load_pygame[filename, pixelalpha=True]
       self.width = tm.width * tm.tilewidth
       self.height = tm.height * tm.tileheight
       self.tmxdata = tm

   def render[self, surface]:
       ti = self.tmxdata.get_tile_image_by_gid
       for layer in self.tmxdata.visible_layers:
           if isinstance[layer, pytmx.TiledTileLayer]:
               for x, y, gid, in layer:
                   tile = ti[gid]
                   if tile:
                       surface.blit[tile, [x * self.tmxdata.tilewidth,
                                           y * self.tmxdata.tileheight]]

   def make_map[self]:
       temp_surface = pygame.Surface[[self.width, self.height]]
       self.render[temp_surface]
       return temp_surface


class Camera:
   def __init__[self, width, height]:
       self.camera = pygame.Rect[0, 0, width, height]
       self.width = width
       self.height = height

   def apply[self, entity]:
       return entity.rect.move[self.camera.topleft]

   def apply_rect[self, rect]:
       return rect.move[self.camera.topleft]

   def update[self, target]:
       x = -target.rect.centerx + int[settings.WIDTH / 2]
       y = -target.rect.centery + int[settings.HEIGHT / 2]

       # limit scrolling to map size
       x = min[0, x]  # left
       y = min[0, y]  # top
       x = max[-[self.width - settings.WIDTH], x]  # right
       y = max[-[self.height - settings.HEIGHT], y]  # bottom
       self.camera = pygame.Rect[x, y, self.width, self.height]

   ```

Xin chào Brett, và chào mừng. Chúc mừng năm mới

Có vẻ như Eryk Sun có thể đã xác định được nguyên nhân gây ra lỗi của bạn. Vui lòng cho chúng tôi biết nếu điều đó khắc phục được

Nhưng trong tương lai, xin đừng đổ hàng chục hoặc hàng trăm dòng mã vào vòng của chúng tôi. Chúng tôi là tình nguyện viên, không được trả tiền để phân tích mã của bạn và bạn càng đổ nhiều mã cho chúng tôi, bạn càng nhận được ít tình nguyện viên hơn

Cách tốt nhất để yêu cầu trợ giúp là dành thời gian để tạo ra một ví dụ tối thiểu có thể lặp lại

Trong trường hợp của bạn, ví dụ tối thiểu có thể giống như

from pytmx.util_pygame import load_pygame
tmx_data = load_pygame["G:/Tiled/Game Python Files/Adjusted TileSet for MapEditor/Maps/Kanto Tiled Map Files"]

mặc dù là người mới bắt đầu, bạn sẽ làm khá tốt để đi xa đến thế. Nhưng mỗi chút đều giúp. cứ thêm 10 dòng mã có thể giảm một nửa số người sẵn sàng đọc nó. [Vâng, chúng tôi lười biếng. Nếu bạn trả tiền cho chúng tôi, bạn có thể sa thải chúng tôi, nhưng bạn không thể, vì vậy bạn không thể

Bạn có thể đọc thêm lời khuyên tại đây

Lý tưởng nhất là bạn nên nhắm tới khoảng mười hoặc hai mươi dòng mã mà chúng tôi có thể chạy để chứng minh sự cố

@eryksun bạn có nghĩ rằng thông báo lỗi cho EACCES [13]/PermissionError có thể được cải thiện không?

Chris Angelico

steven. daprano

@eryksun bạn có nghĩ rằng thông báo lỗi cho EACCES [13]/PermissionError có thể được cải thiện không?

Trên Linux, open["."] tăng IsADirectoryError, đây là lớp con của OSError. Ai đó có máy tính Windows có thể kiểm tra nhanh điều gì xảy ra ở đó không?

>>> open['.']
Traceback [most recent call last]:
  File "", line 1, in 
PermissionError: [Errno 13] Permission denied: '.'

Python open[] gọi WinAPI CreateFileW[] mà không sử dụng cờ cho phép mở thư mục [i. e.

from pytmx.util_pygame import load_pygame
tmx_data = load_pygame["G:/Tiled/Game Python Files/Adjusted TileSet for MapEditor/Maps/Kanto Tiled Map Files"]
0]. Đổi lại, CreateFileW[] gọi chức năng hệ thống NT
from pytmx.util_pygame import load_pygame
tmx_data = load_pygame["G:/Tiled/Game Python Files/Adjusted TileSet for MapEditor/Maps/Kanto Tiled Map Files"]
2 với tùy chọn
from pytmx.util_pygame import load_pygame
tmx_data = load_pygame["G:/Tiled/Game Python Files/Adjusted TileSet for MapEditor/Maps/Kanto Tiled Map Files"]
3, yêu cầu mở một tệp thông thường. Trong trường hợp này, nếu đường dẫn đã mở là một thư mục, cuộc gọi hệ thống không thành công với mã trạng thái
from pytmx.util_pygame import load_pygame
tmx_data = load_pygame["G:/Tiled/Game Python Files/Adjusted TileSet for MapEditor/Maps/Kanto Tiled Map Files"]
4. Cuộc gọi CreateFileW[] ánh xạ mã trạng thái này thành mã lỗi Windows
from pytmx.util_pygame import load_pygame
tmx_data = load_pygame["G:/Tiled/Game Python Files/Adjusted TileSet for MapEditor/Maps/Kanto Tiled Map Files"]
6, mà thời gian chạy C ánh xạ tới
from pytmx.util_pygame import load_pygame
tmx_data = load_pygame["G:/Tiled/Game Python Files/Adjusted TileSet for MapEditor/Maps/Kanto Tiled Map Files"]
7 và Python tăng
from pytmx.util_pygame import load_pygame
tmx_data = load_pygame["G:/Tiled/Game Python Files/Adjusted TileSet for MapEditor/Maps/Kanto Tiled Map Files"]
8

Một bước mà chúng ta có thể dễ dàng thực hiện trong

from pytmx.util_pygame import load_pygame
tmx_data = load_pygame["G:/Tiled/Game Python Files/Adjusted TileSet for MapEditor/Maps/Kanto Tiled Map Files"]
9 là sử dụng giá trị
>>> open['.']
Traceback [most recent call last]:
  File "", line 1, in 
PermissionError: [Errno 13] Permission denied: '.'
0 để lấy mã lỗi Windows cơ bản khi C
>>> open['.']
Traceback [most recent call last]:
  File "", line 1, in 
PermissionError: [Errno 13] Permission denied: '.'
1 không thành công. Điều này đôi khi hữu ích vì thông thường một số mã lỗi Windows được ánh xạ tới cùng một giá trị C
>>> open['.']
Traceback [most recent call last]:
  File "", line 1, in 
PermissionError: [Errno 13] Permission denied: '.'
2. [Thật không may, nó sẽ không giúp ích gì trong trường hợp này. ] Lưu ý rằng, không giống như open[], hầu hết các chức năng trong mô-đun
>>> open['.']
Traceback [most recent call last]:
  File "", line 1, in 
PermissionError: [Errno 13] Permission denied: '.'
4 báo cáo giá trị
>>> open['.']
Traceback [most recent call last]:
  File "", line 1, in 
PermissionError: [Errno 13] Permission denied: '.'
5 trong trường hợp ngoại lệ vì Windows API được sử dụng trực tiếp. Tôi không biết tại sao Python chưa bao giờ sử dụng giá trị
>>> open['.']
Traceback [most recent call last]:
  File "", line 1, in 
PermissionError: [Errno 13] Permission denied: '.'
0 của CRT. Nó không phải là tiêu chuẩn C, nhưng nó có từ ít nhất là những năm 1990 trong các phiên bản đầu tiên của CRT trên hệ thống NT và nó luôn được ghi lại

Cũng có thể lấy mã trạng thái NT ban đầu, nhưng chúng tôi đang có nhiều nghi ngờ hơn trong trường hợp này. Chức năng lấy trạng thái NT cuối cùng,

>>> open['.']
Traceback [most recent call last]:
  File "", line 1, in 
PermissionError: [Errno 13] Permission denied: '.'
7, không có giấy tờ [nhưng ổn định từ những năm 1990]. Ngoài ra, API Windows được tự do đặt lỗi cuối cùng không liên quan đến mã trạng thái NT cuối cùng. Không có hợp đồng phần mềm nào liên quan đến cách API Windows sử dụng API NT. Điều đó nói rằng, nó sẽ giúp ích trong trường hợp này, cho bất cứ điều gì nó có giá trị

Ví dụ

import os
import errno
import ctypes

RtlGetLastNtStatus = ctypes.WinDLL['ntdll'].RtlGetLastNtStatus
STATUS_FILE_IS_A_DIRECTORY = ctypes.c_long[0xC000_00BA].value
ERROR_ACCESS_DENIED = 5

# BUGBUG: In debug builds, this must use the debug CRT, "ucrtbased".
_doserrno = ctypes.CDLL['ucrtbase'].__doserrno
_doserrno.restype = ctypes.POINTER[ctypes.c_ulong]

def opener[name, flags]:
    try:
        return os.open[name, flags]
    except OSError as e:
        ntstatus = RtlGetLastNtStatus[]
        winerror = _doserrno[][0]
        if [e.errno == errno.EACCES and winerror == ERROR_ACCESS_DENIED and
              ntstatus == STATUS_FILE_IS_A_DIRECTORY]:
            e = IsADirectoryError[errno.EISDIR, os.strerror[errno.EISDIR],
                    e.filename, winerror]
            raise e from None
        raise
>>> open['.', opener=opener]
Traceback [most recent call last]:
  File "", line 1, in 
  File "", line 24, in opener
IsADirectoryError: [WinError 5] Is a directory: '.'

Dấu chấm kép có nghĩa là di chuyển lên thư mục mẹ

Khi Python mở tệp, nó phải duyệt qua danh sách các thư mục

'G:/Tiled/Game Python Files/Adjusted TileSet for MapEditor/Maps/Kanto Tiled Map Files\../Kanto Tiled Map Files\../Adjusted TileSet for MapEditor/Towns or Cities/Pallet_town.png'

Vì vậy, bắt đầu từ ổ G, nó chuyển sang ________2_____8 sau đó ________2_____9, v.v.

Đó là một mớ hỗn độn. Tại sao nó được viết theo cách đó?

Bạn nên dọn dẹp đường dẫn, đảm bảo rằng nó chính xác và không có lỗi chính tả nào và Pallet_town. png thực sự tồn tại ở nơi bạn đang yêu cầu Python tìm

Ngoài ra, bạn chỉ nên sử dụng dấu gạch chéo xuôi _______18_______6 cho dấu phân cách đường dẫn, không phải dấu gạch chéo ngược, dấu gạch chéo ngược có thể hoạt động trong Windows nhưng cũng có thể gây rắc rối. Nó thường dễ dàng hơn để tránh các dấu gạch chéo ngược bằng cách thay đổi chúng thành các dấu gạch chéo về phía trước

# Sometimes this is problematic:
G:\Tiled\

# This is usually better:
G:/Tiled/

Tôi thậm chí đã thử xếp chồng thư mục để cố gắng xoa dịu nó nhưng chỉ nhận được các biến thể lỗi ngày càng phức tạp hơn

"Xếp chồng thư mục" nghĩa là gì?

Thực hiện các thay đổi ngẫu nhiên đối với tên đường dẫn không có khả năng giúp ích. Điều đó giống như cố gắng sửa một chiếc ô tô bị hỏng bằng cách dùng búa tạ lớn đập ngẫu nhiên vào các bộ phận của động cơ.

Tại sao Python nói quyền bị từ chối?

Python đang cố mở một thư mục dưới dạng tệp , đó là lý do tại sao nó báo “Quyền bị từ chối. ” Kiểm tra nơi bạn muốn mở lại tệp và đảm bảo rằng không có thư mục nào có cùng tên.

Quyền bị từ chối mã 13 là gì?

[13] Quyền bị từ chối. Lỗi 13 biểu thị sự cố về quyền đối với hệ thống tệp . Đó là, Apache đã bị từ chối truy cập vào một tệp hoặc thư mục do quyền không chính xác. Nói chung, nó không ngụ ý một vấn đề trong các tệp cấu hình Apache.

Chủ Đề