حدث خطأ أثناء محاولة كتابة معلومات cProfile إلى الملف
-
21-12-2019 - |
سؤال
أحاول تحميل ملف تعريف cProfile، وإجراء بعض الفرز والدقة، ثم إخراج النتائج إلى ملف.على أساس توثيق, ، اعتقدت أنه يمكنني ببساطة تمرير كائن ملف وملف print_stats
ستعيد الوظيفة التوجيه إلى هذا الدفق.
إليك الكود الذي أحاول استخدامه:
import sys,pstats
s = open('output.txt', 'w')
p = pstats.Stats('profile.dat', s)
وهنا هو الخطأ الناتج:
TypeError: Cannot create or construct a <class pstats.Stats at 0xbaa870> object from '<open file 'output.txt', mode 'w' at 0xb2ef60>''
يجب أن أضيف أيضًا أنه عندما لا أقوم بتمرير كائن إلى معلمة الدفق، يظهر الإخراج كالمعتاد في الوحدة الطرفية.
المحلول
بالنظر إلى الكود المصدري، سيتعين عليك تمرير الملف كملف stream
وسيطة الكلمة الرئيسية (ليس من الواضح بالنسبة لي سبب تنفيذها بهذه الطريقة...)، مثل:
p = pstats.Stats('profile.dat', stream = s)
انظر أدناه التعليق المضمن، و if "stream" in kwds
خط.
class Stats:
"""..."""
def __init__(self, *args, **kwds):
# I can't figure out how to explictly specify a stream keyword arg
# with *args:
# def __init__(self, *args, stream=sys.stdout): ...
# so I use **kwds and sqauwk if something unexpected is passed in.
self.stream = sys.stdout
if "stream" in kwds:
self.stream = kwds["stream"]
del kwds["stream"]
if kwds:
keys = kwds.keys()
keys.sort()
extras = ", ".join(["%s=%s" % (k, kwds[k]) for k in keys])
raise ValueError, "unrecognized keyword args: %s" % extras
if not len(args):
arg = None
else:
arg = args[0]
args = args[1:]
self.init(arg)
self.add(*args)
لا تنتمي إلى StackOverflow