Python: sqlalchemy результат схемы не ожидается [дубликат]

Если у вас возникли проблемы с отправкой писем с помощью PHP, рассмотрите альтернативу, например PHPMailer или SwiftMailer .

Обычно я использую SwiftMailer всякий раз, когда мне нужно для отправки писем с PHP.


Основное использование:

require 'mail/swift_required.php';

$message = Swift_Message::newInstance()
    // The subject of your email
    ->setSubject('Jane Doe sends you a message')
    // The from address(es)
    ->setFrom(array('jane.doe@gmail.com' => 'Jane Doe'))
    // The to address(es)
    ->setTo(array('frank.stevens@gmail.com' => 'Frank Stevens'))
    // Here, you put the content of your email
    ->setBody('

New message

Here goes the rest of my message

', 'text/html'); if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) { echo json_encode([ "status" => "OK", "message" => 'Your message has been sent!' ], JSON_PRETTY_PRINT); } else { echo json_encode([ "status" => "error", "message" => 'Oops! Something went wrong!' ], JSON_PRETTY_PRINT); }

Подробнее о том, как использовать SwiftMailer, см. в официальной документации .

113
задан Antti Haapala 6 April 2016 в 13:01
поделиться

5 ответов

>>> x = 'foo'
>>> x
'foo'

Итак, имя x прикреплено к строке 'foo'. Когда вы вызываете, например, repr(x), интерпретатор помещает 'foo' вместо x, а затем вызывает repr('foo').

>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"

repr фактически вызывает магический метод __repr__ в x ], который дает строку, содержащую представление значения 'foo', присвоенное x. Поэтому он возвращает 'foo' внутри строки "", что приводит к "'foo'". Идея repr состоит в том, чтобы дать строку, содержащую ряд символов, которые мы можем ввести в интерпретаторе, и получить то же значение, которое было отправлено как аргумент repr.

>>> eval("'foo'")
'foo'

Когда мы вызываем eval("'foo'"), это то же самое, что мы набираем 'foo' в интерпретаторе. Это как мы непосредственно набираем содержимое внешней строки "" в интерпретаторе.

>>> eval('foo')

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    eval('foo')
  File "<string>", line 1, in <module>
NameError: name 'foo' is not defined

Если мы назовем eval('foo'), это то же самое, что мы набираем foo в интерпретаторе. Но нет переменной foo и возникает исключение.

>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>> 

str - это просто строковое представление объекта (помните, что переменная x относится к 'foo'), так что эта функция возвращает строку.

>>> str(5)
'5'

Строковое представление integer 5 - '5'.

>>> str('foo')
'foo'

И строковое представление строки 'foo' - это одна и та же строка 'foo'.

138
ответ дан Naseer Mohammad 22 August 2018 в 23:37
поделиться

Обратная связь, которую вы получаете на интерактивном интерпретаторе, также использует repr. Когда вы вводите выражение (пусть оно будет expr), интерпретатор в основном выполняет result = expr; if result is not None: print repr(result). Таким образом, вторая строка в вашем примере - , форматирующая строку foo в желаемое представление ('foo'). И тогда интерпретатор создает repr представление , что , оставляя вас с двойными кавычками.

Почему, когда я совмещаю% r с двойными кавычками и одиночными кавычками и распечатайте их, он печатает его так, как я бы написал его в моем .py-файле, но не так, как хотелось бы видеть его?

Я не уверен, что вы здесь спрашивают. Текст single ' and double " quotes при прохождении через repr включает экраны для одного вида цитаты. Конечно, это так, иначе это не будет корректным строковым литералом по правилам Python. Это то, о чем вы просили, вызвав repr.

Также обратите внимание, что аналог eval(repr(x)) == x не имеет значения буквально. Это приближение и справедливо для большинства (всех?) Встроенных типов, но главное, что вы получаете довольно хорошее представление о типе и логическом «значении» от просмотра выхода repr.

9
ответ дан ascentman 22 August 2018 в 23:37
поделиться
  • 1
    Первоначально это фактически было означало быть буквальным: каждое значение repr должно быть чем-то, что может быть передано в eval (или скопировано и вставлено в исходный код), чтобы получить равное значение, или что-то, что поднимет SyntaxError, когда вы попробуете это (обычно стиль <…>, созданный object.__repr__). На протяжении многих лет это постепенно уменьшалось, а на 2.7 и 3.x это было просто «для многих типов», и есть исключения даже в stdlib (например, тип namedtuple, созданный как локальный, даст вам a repr вы не можете eval), но это была оригинальная идея. – abarnert 25 June 2018 в 21:08

str () используется для создания вывода для конечного пользователя, в то время как функция repr () используется для разработки debuggin. И он является официальным объектом.

Пример:

>>> import datetime
>>> today = datetime.datetime.now()
>>> str(today)
'2018-04-08 18:00:15.178404'
>>> repr(today)
'datetime.datetime(2018, 4, 8, 18, 3, 21, 167886)'

Из вывода видно, что repr () показывает официальное представление объекта даты.

0
ответ дан Mona Jalal 22 August 2018 в 23:37
поделиться

1) Результатом repr('foo') является строка 'foo'. В вашей оболочке Python результат выражения также выражается как представление, поэтому вы видите repr(repr('foo')).

2) eval вычисляет результат выражения. Результатом всегда является значение (например, число, строка или объект). Несколько переменных могут ссылаться на одно и то же значение, например:

x = 'foo'
y = x

x и y теперь относятся к одному и тому же значению.

3) Я понятия не имею, что вы имели в виду здесь. Можете ли вы опубликовать пример и что вы хотите увидеть?

2
ответ дан phihag 22 August 2018 в 23:37
поделиться

Когда вы говорите

foo = 'bar'
baz(foo)

, вы не передаете foo функции baz. foo - это просто имя, используемое для представления значения, в данном случае 'bar', и это значение передается функции baz.

2
ответ дан SingleNegationElimination 22 August 2018 в 23:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: