我正在编写一个脚本来配合我自制的智能家居网络,我在文件中存储变量时遇到了问题。这是代码的删节版本
import datetime
import os
log = open('log.txt')
def timestamp():
errortime = ('Timestamp: {:%Y-%m-%d %H:%M:%S}'.format(datetime.datetime.now()))
print(errortime)
errortime = str(errortime)
def errormessage():
//code
def consolelog():
log.write('Timestamp: ' + timestamp())
log.write('Error Type: ' + errormessage())
log.write('------------------')
try:
prit('hello')
except:
consolelog()
print('done')
该代码旨在尝试代码'prit('hello'(,它将作为语法错误返回,从而将变量(错误类型(存储为语法错误。 在此之后,我尝试将时间戳和错误类型变量插入到返回以下错误的日志.txt文件中:
log.write('Timestamp: ' + timestamp())
can only concatenate str (not "NoneType") to str
任何人都可以解释一种在不收到 TypeError 的情况下将变量输入文件的方法吗?
import datetime
import os
log = open('log.txt', 'w')
def timestamp():
errortime = (
'Timestamp: {:%Y-%m-%d %H:%M:%S}'.format(datetime.datetime.now()))
print(errortime)
errortime = str(errortime)
return errortime
def errormessage(e):
errortype = ''
if isinstance(e, OSError):
errortype = ('OSError')
elif isinstance(e, SyntaxError):
errortype = ('SyntaxError')
elif isinstance(e, AssertionError):
errortype = ('AssertionError')
elif isinstance(e, NameError):
errortype = 'NameError'
return errortype
def consolelog(e):
log.write('Timestamp: ' + timestamp())
log.write('Error Type: ' + errormessage(e))
log.write('------------------')
try:
prit('hello')
except Exception as e:
consolelog(e)
print('done')
timestamp()
不应该自己打印,它应该只返回字符串。
您还需要使用datetime.strftime()
,而不是普通的字符串格式。
def timestamp():
return datetime.datetime.now().strftime('Timestamp: {:%Y-%m-%d %H:%M:%S}')
首先,在打开文件时,您应该确定处理文件的模式:
log = open('log.txt', 'w')
这里的"w"用于指示我们要清除文件(如果它已经存在(或创建它(如果它不存在(,然后从头开始写入它。否则,如果我们想保留当前文件并将新数据附加到末尾,我们应该使用"a"(追加(模式。
需要注意的另一件重要事情是,您需要在完成对文件的更改后关闭文件,以便保存更改;因此,在log.write()
之后,您需要添加log.close()
。
您收到的错误是因为时间戳函数不返回任何内容(实际上它返回 NULL(。使用'Timestamp: ' + timestamp()
时timestamp()
返回当前时间戳。但是在时间戳函数中打印错误时间并不能解决问题;您需要通过在函数底部添加return errortime
来从函数返回 errortime 变量。