J'écris un script pour aller avec mon réseau de maison intelligent fait maison et je suis tombé sur un problème de stockage de variables dans un fichier. Voici une version abrégée du code
log.write('Timestamp: ' + timestamp()) can only concatenate str (not "NoneType") to str
3 Réponses :
Vous devez également utiliser horodaimstamp () code> ne doit pas faire sa propre impression, il devrait simplement renvoyer la chaîne.
denttime.strftime () code>, pas Formation de chaîne ordinaire. P>
def timestamp():
return datetime.datetime.now().strftime('Timestamp: {:%Y-%m-%d %H:%M:%S}')
Ceci corrigé le typeError mais maintenant que la ligne renvoie une exception non supportéeOpéderRorRor est survenue: non-prise en charge non inscrite
Vous devez utiliser StrfTime () code> pour formater l'heure.
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')
Cela a fonctionné parfaitement, merci.
Tout d'abord lors de l'ouverture d'un fichier, vous devez déterminer le mode que vous utilisez avec le fichier: ici "W 'est utilisé pour indiquer que nous voulons effacer le fichier s'il veut Il existe déjà ou créez-le si cela ne l'écrit pas, puis écrivez-le depuis le début. Sinon, si nous voulons conserver le fichier actuel et ajouter de nouvelles données à la fin, nous devons utiliser le mode 'A' (ANNEX). P> Une autre chose importante à remarquer est que vous devez fermer le fichier après votre Terminez en apportant des modifications afin que vos modifications soient enregistrées; Ainsi, après le L'erreur que vous obtenez est due à la fonction TIESTAMP ne rien retourner (en fait, il renvoie null). Lorsque vous utilisez log.write () code> Vous devez ajouter
log.close () code>. P>
'Timestamp:' + horodatage () code> Ce que vous voulez est
horodatage () code> renvoie l'horodatage actuel. Mais l'impression de l'errorime dans la fonction horodatage ne fait pas l'affaire; Vous devez renvoyer la variable Errortime de la fonction en ajoutant
retour Errorime code> au bas de la fonction. P> p>
Vous devez retourner une valeur de votre fonction. retour Errorime
@Seeaverolson: Je ne vois pas comment cette question est liée à Bash.
TYPO:
Prit code> devrait être
Imprimer code>
@Barmar Prit est exprès pour déclencher une erreur de syntaxe
Prit code> ne déclenche pas un
syntaxError code>, il déclenche un
nomError code>. Aucune de vos fonctions
retourner code> n'importe quoi. La logique de
errorormageage code> a peu de sens, comparant différents produits deté les uns contre les autres. S'il vous plaît Modifier Votre question de détailler ce que vous essayez de faire. De préférence, retirez le code sans rapport avec le code brisé et créez un exemple de reproductible minimal juste pour la tâche d'écriture.