otugaPosts. 65Tham gia. Thứ hai 12 Tháng bảy 2021 7. 41 giờ chiều
biến toàn cục giữa các mô-đun
- Trích dẫn
T3 06/09/2022 10. 08 giờ sáng
Tôi đang gặp khó khăn khi sử dụng các biến toàn cục với python. đây là cấu trúc mã của tôi.
nhà\chính. py
home\data\variables. py
home\khởi tạo\khởi tạo. py
chính. p
Mã số. Chọn tất cả
from source.initialization import Init
from data.variables import start_time
if __name__ == "__main__":
global start_time
Init[]
print["Main -> start time: "+ str[start_time]]
biến. pyMã số. Chọn tất cả
start_time = 0
khởi tạo. pyMã số. Chọn tất cả
from data.global_variables import start_time
def Init[]:
global start_time
start_time = 100
print["Initialization -> start Time: " + str[start_time]]
my output is:2022-09-06 10:37:52.333199 --> Initialization -> start Time: 100
2022-09-06 10:37:52.336050 --> Main -> start time: 0
What am I doing wring? why is start_time not passing through?
Lần sửa cuối bởi otuga vào Thứ ba, ngày 06 tháng 9 năm 2022 10. 49 giờ sáng, tổng cộng đã chỉnh sửa 1 lần
ghpPosts. 2927Đã tham gia. Thứ tư 12 Tháng sáu 2013 12. 41 giờ chiềuĐịa điểm. Stuttgart Đức
Lại. biến toàn cục giữa các mô-đun
- Trích dẫn
T3 06/09/2022 1. 55 giờ chiều
Hmmm, có một số sự cố không mong muốn khi chạy mã.
Tệp "chính. py", dòng 4
if __name__ == "__main__".
Lỗi thụt đầu dòng. thụt lề không mong muốn
Đã sửa lỗi này, sau đó
Truy xuất lại [lần gọi gần đây nhất].
Tệp "chính. py", dòng 1, trong
từ nguồn. khởi tạo import Init
ModuleNotFoundError. Không có mô-đun nào có tên là 'nguồn'
Không có mô-đun nào có tên là nguồn. Thay đổi từ "nguồn. init init" thành "từ init init khởi tạo"
Sau đó
Truy xuất lại [lần gọi gần đây nhất].
Tệp "chính. py", dòng 1, trong
từ quá trình khởi tạo import Init
ImportError. không thể nhập tên 'Init' từ 'khởi tạo' [vị trí không xác định]
Đã sửa lỗi này thành "từ khởi tạo. khởi tạo import Ban đầu"
Sau đó
Truy xuất lại [lần gọi gần đây nhất].
Tệp "chính. py", dòng 1, trong
từ quá trình khởi tạo. nhập khởi tạo Init
Tệp "khởi tạo\khởi tạo. py", dòng 1, trong
từ dữ liệu. global_variables nhập start_time
ModuleNotFoundError. Không có mô-đun nào có tên 'dữ liệu. global_variables'
Đã sửa lỗi này thành "từ dữ liệu. biến nhập start_time"
Sau đó, ít nhất không có Ngoại lệ trong khi thực thi.
Các biến.
chính. py, "từ dữ liệu. biến nhập start_time" nhập biến vào chính. global[] và có giá trị ban đầu.
khởi tạo. py, "từ dữ liệu. biến nhập start_time" nhập biến vào khởi tạo. global[] và có giá trị ban đầu. Thay đổi biến trong Init[] chỉ sửa đổi khởi tạo. start_time, vì vậy cái hiện có trong mô-đun.
Một giải pháp khả thi. thay vì "từ nhập khẩu này" sử dụng tên đầy đủ đủ điều kiện.
khởi tạo. p
Mã số. Chọn tất cả
# just for analysis
from data.variables import start_time
# better
import data.variables
print["initialization.start_time", start_time]
def Init[]:
global start_time
print["start_time", start_time]
# changes the module's variable only
start_time = 100
data.variables.start_time = 101
print["Init[] start_time ", start_time]
print["Init[] data.variables.start_time ", data.variables.start_time]
chính. pyMã số. Chọn tất cả
# for analysis only
from initialization.initialization import Init
from data.variables import start_time
# better
import initialization.initialization
import data.variables
if __name__ == "__main__":
Init[]
print["---------- results"]
print["main -> start time: ", start_time]
print["main -> data.variables.start time: ", data.variables.start_time]
print["main -> initialization.initialization.start time: ", initialization.initialization.start_time]
It is pretty clear that by using improper import there are three 'start_time' variables in the modules [happily causing confusion]. Thay vì chuyển UserId trực tiếp cùng với một hành động của máy chủ [thực sự có thể bị thao túng], tôi kiểm tra UserId khi đăng nhập và thực hiện một Hành động máy chủ từ lõi trong khi chuyển "CustomerId". CustomerId này được ánh xạ tới UserId trong chính Ứng dụng web và trước khi gửi CustomerId tới Core Server Action, nó được kiểm tra xem người dùng đã đăng nhập có thực sự được phép gửi CustomerId đó tới core hay không
Sau đó, trong cốt lõi, tôi lọc theo CustomerId [điều mà dù sao tôi cũng phải làm, vì tôi không có "UserId trong bất kỳ Thực thể nào của mình].
Tôi cũng dự định thực hiện một kiểm tra khác trong chính Hành động máy chủ lõi để kiểm tra xem CustomerId đã qua có bị thao túng hay không, nhưng hiện tại điều này đã giải quyết được sự cố của tôi