के साथ stderr पर लिखने के लिए फ़ंक्शन मैं एक प्रोग्राम लिख रहा हूं जिसे दोनों पायथन 2 और पायथन 3 के साथ काम करना चाहिए। इसके लिए, मैं stderr को लिखने के लिए एक फ़ंक्शन रखना चाहता हूं जो दोनों पायथन संस्करणों के साथ काम करता है।python2 और python3
आदर्श मैं की तरह कुछ हो जाएगा लगता है:
def writeStdErr(message):
if sys.version_info >= (3, 0):
print(message, end = "", file = sys.stderr)
else:
sys.stderr.write(message)
यह है कि को Python2 है के साथ समस्या यह है कि प्रिंट कार्य नहीं है, इसलिए मैं
print(message, end = "", file = sys.stderr)
^
SyntaxError: invalid syntax
मैं से छुटकारा पाने सकता है मिल यह केवल eval जोड़कर:
def writeStdErr(message):
if sys.version_info >= (3, 0):
eval('print(message, end = "", file = sys.stderr)')
else:
sys.stderr.write(message)
हालांकि, मैं इस समाधान को नापसंद करता हूं; मुझे लगता है कि eval का उपयोग करना सामान्य बात है।
क्या कोई बेहतर कुछ जानता है/बेहतर समाधान है?
संपादित करें:
भविष्य में ये समस्या हो रही किसी के लिए, निम्नलिखित बातें लगते हैं काम करता है:
def writeStdErr(message):
sys.stderr.write(message)
या
from __future__ import print_function
import sys
def writeStdErr(message):
print(message, file=sys.stderr)
सभी प्रश्नों के उत्तर के लिए धन्यवाद
'sys.stderr.write (message)' पायथन 3 के तहत भी काम नहीं करता है? क्यों न सिर्फ सभी संस्करणों के लिए इसका उपयोग करें? – jwodder
कोई sys.stderr.write दुर्भाग्य से पायथन 3 के तहत काम नहीं करता है। Thats मैं यह जांचना चुनता हूं कि कौन सा पायथन संस्करण – quant
चला रहा है मैंने अभी संस्करण 3.1 और 3.3 में परीक्षण किया है, और 'sys.stderr.write (' foo ')' दोनों में काम किया है। जब आप इसे करने का प्रयास करते हैं तो क्या होता है? – jwodder