मेरे पास एक पायथन प्रोजेक्ट है जिस पर मैं काम कर रहा हूं, प्रिंट प्रिंट स्टेटमेंट्स के बजाय मैं एक फ़ंक्शन कहता हूं() ताकि उत्पादन के दौरान विकास और लॉग जानकारी के दौरान मैं जानकारी प्रिंट कर सकूं। हालांकि, मैं अक्सर इसे भूल जाता हूं और गलती से कोड में प्रिंट स्टेटमेंट डालता हूं। क्या पाइथन प्रोग्राम अपने स्रोत को पढ़ने के लिए वैसे भी है, और बाहर निकलने() अगर यह फ़ंक्शन के बाहर कोई प्रिंट स्टेटमेंट कहता है()?प्रिंट स्टेटमेंट्स को रोकने के लिए स्वयं स्कैनिंग कोड
उत्तर
यह ast
मॉड्यूल का उपयोग किया जा सकता है:
from __future__ import print_function
print = None
एक साथ इस लाना अपने say()
समारोह के साथ, आप की तरह कुछ कर सकता है। यदि आप पाइथन 3 या पायथन 2 पर print_function
भविष्य के साथ print
कथन और print()
फ़ंक्शन के किसी भी कॉल को प्राप्त करेंगे।
import ast
class PrintFinder(ast.NodeVisitor):
def __init__(self):
self.prints_found = []
def visit_Print(self, node):
self.prints_found.append(node)
super(PrintFinder, self).generic_visit(node)
def visit_Call(self, node):
if getattr(node.func, 'id', None) == 'print':
self.prints_found.append(node)
super(PrintFinder, self).generic_visit(node)
def find_print_statements(filename):
with open(filename, 'r') as f:
tree = ast.parse(f.read())
parser = PrintFinder()
parser.visit(tree)
return parser.prints_found
print 'hi'
for node in find_print_statements(__file__):
print 'print statement on line %d' % node.lineno
इस उदाहरण के उत्पादन में है:
हाय
लाइन पर प्रिंट बयान 24 लाइन 26
जबकि मैं ऐसा करने की अनुशंसा नहीं करता हूं, अगर आप वास्तव में चाहते हैं कि पाइथन दुभाषिया print
कथन को फिर से परिभाषित करके एक त्रुटि फेंक दे।
अगर पायथन 3 का उपयोग, बस अपने कोड की शुरुआत/शीर्ष के निकट यह डाल:
print = None
किसी भी print
बयान देखते हैं, तो आप एक TypeError: 'NoneType' object is not callable
त्रुटि मिल जाएगा।
यदि पायथन 2.x का उपयोग करते हैं, तो आप Python 2.x को अतिव्यापी प्रिंट स्टेटमेंट रखने की अनुमति देने के लिए किसी अन्य answer में सुझाए गए विचार का उपयोग कर सकते हैं।
print_original = print
print = None
def say(data):
print = print_original
# Your current `say()` code here, such as:
print(data) # Could just use `print_original` instead.
# Redefine print to make the statement inaccessible outside this function.
print = None
'कोई नहीं' कॉल करने योग्य नहीं है, इसलिए जब आपका नया 'प्रिंट' "फ़ंक्शन" कहा जाता है तो यह अपवाद उठाएगा। वास्तव में ओपी क्या चाहता है वास्तव में नहीं। विशेष रूप से जब यह कोड वास्तव में निष्पादित किया जाता है तो यह केवल तभी टूट जाएगा। – ThiefMaster
ओपी का कहना है कि वह अपने कार्यक्रम को बाहर निकलने के लिए चाहते हैं() अगर यह किसी भी प्रिंट स्टेटमेंट से मुकाबला करता है। अपवाद फेंकने से प्रोग्राम बाहर निकल जाएगा। हालांकि, मैं मानता हूं कि यह पहली जगह में एक बहुत ही वांछनीय बात नहीं है, लेकिन यह मुझे लगता है कि किसी के लिए काम कर सकता है। –
मेरे लिए ऐसा लगता है जैसे वह पूरे स्रोत को देखना चाहता है और इसे निष्पादन के दौरान * कुछ * बिंदु पर नहीं करता – ThiefMaster
पर
प्रिंट बयान आप क्यों नहीं बस इसके साथ ऐसा नहीं करते अपने पाठ संपादक? – Blender
ctrl f या ctrl r आपके टेक्स्ट एडिटर में .... –
मेरा टेक्स्ट एडिटर कोड के निष्पादन पर चलने वाले आदेशों में असमर्थ है। – captainandcoke