Hướng dẫn convert string to command python - chuyển đổi chuỗi thành lệnh python

Tránh exec và eval

Sử dụng exec và eval trong Python rất cau mày.

Có những lựa chọn thay thế tốt hơn

Từ câu trả lời hàng đầu (nhấn mạnh của tôi):

Đối với các câu lệnh, sử dụng exec.

Khi bạn cần giá trị của một biểu thức, hãy sử dụng eval.

Tuy nhiên, bước đầu tiên là tự hỏi liệu bạn có thực sự cần không. Việc thực thi mã thường là vị trí của phương sách cuối cùng: nó chậm, xấu và nguy hiểm nếu nó có thể chứa mã nhập vào người dùng. Bạn nên luôn luôn nhìn vào các lựa chọn thay thế trước, chẳng hạn như các hàm bậc cao hơn, để xem liệu những điều này có thể đáp ứng tốt hơn nhu cầu của bạn không.Executing code should generally be the position of last resort: It's slow, ugly and dangerous if it can contain user-entered code. You should always look at alternatives first, such as higher order functions, to see if these can better meet your needs.

Từ các lựa chọn thay thế đến Exec/Eval?

Đặt và nhận các giá trị của các biến có tên trong chuỗi

[Trong khi eval] sẽ hoạt động, thường không nên sử dụng các tên biến có nghĩa là chính chương trình.

Thay vào đó, tốt hơn sử dụng một dict.

Nó không thành ngữ

Từ http://lucumr.pocoo.org/2011/2/1/exec-in-python/ (nhấn mạnh của tôi)

Python không phải là PHP

Đừng cố gắng phá vỡ các thành ngữ Python vì một số ngôn ngữ khác làm điều đó khác nhau. Các không gian tên nằm trong Python vì một lý do và chỉ vì nó cung cấp cho bạn công cụ exec, điều đó không có nghĩa là bạn nên sử dụng công cụ đó.just because it gives you the tool exec it does not mean you should use that tool.

Nó nguy hiểm

Từ http://nedbatchelder.com/blog/201206/eval_reallly_is_dangero.html (nhấn mạnh của tôi)

Vì vậy, Eval không an toàn, ngay cả khi bạn loại bỏ tất cả các toàn cầu và các công trình xây dựng!

Vấn đề với tất cả những nỗ lực để bảo vệ Eval () là chúng là danh sách đen. Họ loại bỏ rõ ràng những thứ có thể nguy hiểm. Đó là một trận thua vì nếu chỉ còn một mục trong danh sách, bạn có thể tấn công hệ thống.attempts to protect eval() is that they are blacklists. They explicitly remove things that could be dangerous. That is a losing battle because if there's just one item left off the list, you can attack the system.

Vì vậy, có thể đánh giá được làm an toàn? Khó nói. Tại thời điểm này, dự đoán tốt nhất của tôi là bạn không thể gây hại nếu bạn không thể sử dụng bất kỳ dấu gạch dưới kép nào, vì vậy có lẽ nếu bạn loại trừ bất kỳ chuỗi nào có dấu gạch dưới kép, bạn an toàn. Có lẽ...

Thật khó để đọc và hiểu

Từ http://stupidpythonideas.blogspot.it/2013/05/why-evalexec-is-bad.html (nhấn mạnh của tôi):

Đầu tiên, exec làm cho con người khó đọc mã của bạn khó khăn hơn. Để tìm ra những gì đang xảy ra, tôi không phải đọc mã của bạn, tôi phải đọc mã của bạn, tìm ra chuỗi nào nó sẽ tạo ra, sau đó đọc mã ảo đó. Vì vậy, nếu bạn đang làm việc trong một nhóm hoặc xuất bản phần mềm nguồn mở hoặc yêu cầu trợ giúp ở một nơi nào đó như StackoverFlow, bạn sẽ khiến người khác khó giúp bạn hơn. Và nếu có bất kỳ cơ hội nào bạn sẽ gỡ lỗi hoặc mở rộng mã này 6 tháng kể từ bây giờ, bạn sẽ làm cho nó khó khăn hơn cho bản thân trực tiếp hơn.exec makes it harder to human beings to read your code. In order to figure out what's happening, I don't just have to read your code, I have to read your code, figure out what string it's going to generate, then read that virtual code. So, if you're working on a team, or publishing open source software, or asking for help somewhere like StackOverflow, you're making it harder for other people to help you. And if there's any chance that you're going to be debugging or expanding on this code 6 months from now, you're making it harder for yourself directly.

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọc
    Examples: 
     

    Input:
    code = """ a = 6+5
               print(a)"""
    Output:
    11
    Explanation:
    Mind it that "code" is a variable and
    not python code. It contains another code, 
    which we need to execute.
    
    Input:
    code = """ def factorial(num):
                   for i in range(1,num+1):
                       fact = fact*i
                   return fact
               print(factorial(5))"""
    Output:
    120
    Explanation:
    On executing the program containing the 
    variable in Python we must get the result 
    after executing the content of the variable.

    Bàn luậnexec() function to solve the code contained inside a variable. exec() function is used for the dynamic execution of Python code. It can take a block of code containing Python statements like loops, class, function/method definitions and even try/except block. This function doesn’t return anything. The code below solves the problem and explains the exec() function. 
     

    Python3

    120
    1
    120
    2

    120
    3
    120
    4
    120
    5

    120
    3exec
    120
    8

    120
    9

    Output:  
     

    120

    Bài viết này được đóng góp bởi Chinmoy Lenka. Nếu bạn thích GeekSforGeeks và muốn đóng góp, bạn cũng có thể viết một bài viết bằng Write.GeekSforGeek.org hoặc gửi bài viết của bạn. Xem bài viết của bạn xuất hiện trên trang chính của GeekSforGeek và giúp các chuyên viên máy tính khác. Xin vui lòng viết nhận xét nếu bạn tìm thấy bất cứ điều gì không chính xác hoặc bạn muốn chia sẻ thêm thông tin về chủ đề được thảo luận ở trên. & NBSP;Chinmoy Lenka. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to . See your article appearing on the GeeksforGeeks main page and help other Geeks.
    Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
     

    Làm thế nào để bạn chuyển đổi một chuỗi thành một lệnh trong Python?

    Nếu bạn muốn thực thi các câu lệnh Python, bạn có thể sử dụng Exec (String).Ví dụ: >>> my_code = 'In "Hello World!"' >>> exec (my_code) Xin chào thế giới!exec(string). For example, >>> my_code = 'print "Hello World!"' >>> exec(my_code) Hello World!

    Làm thế nào để bạn thực hiện một chuỗi?

    Cho một vài dòng mã bên trong một biến chuỗi và thực thi mã bên trong chuỗi.Ví dụ: Đầu vào: CODE = "" "A = 6+5 In (a)" "" Đầu ra: 11 Giải thích: Hãy nhớ rằng "mã" là một biến và không phải là mã python.. Examples: Input: code = """ a = 6+5 print(a)""" Output: 11 Explanation: Mind it that "code" is a variable and not python code.