Python 2.6+および3. *はnext()を持っていますが、2.6以前はobject.nextメソッドしか提供していません。 2.6より前のバージョンでnext()スタイルを取得する方法はありますか?おそらくいくつかの "def next():"の構築でしょうか?def next()for Python 2.6より前? (object.nextメソッドの代わりに)
答えて
class Throw(object): pass
throw = Throw() # easy sentinel hack
def next(iterator, default=throw):
"""next(iterator[, default])
Return the next item from the iterator. If default is given
and the iterator is exhausted, it is returned instead of
raising StopIteration.
"""
try:
iternext = iterator.next.__call__
# this way an AttributeError while executing next() isn't hidden
# (2.6 does this too)
except AttributeError:
raise TypeError("%s object is not an iterator" % type(iterator).__name__)
try:
return iternext()
except StopIteration:
if default is throw:
raise
return default
(throw = object()
はあまりにも動作しますが、検査する場合、これは、より良いドキュメントを生成し、例えばhelp(next)
。None
あなたが異なっnext(it)
とnext(it, None)
を扱わなければならないので、適当ではない。)
R.ペイトが良いを持っているようです回答。あなたは、Pythonのさまざまなバージョンで実行するコードを書いている場合は、あなたが定義を条件付きすることができます:1つの余分追加するベル
try:
next = next
except NameError:
def next():
# blah blah etc
あなたはどのような場合にnext
が定義されていることの方法がありますが、使用しています利用可能な場所に実装されています。私は私のコードを使用して、その後別の場所で、モジュールにこの定義を置くことができるように
は私がnext = next
を使用します。
from backward import next
次のテストはできませんか?例えば。 'try:next; except ... ' –
これはプロジェクトにこれらの定義を含める方法と関係があります。私は答えをうかがった。 –
簡単な方法:try
にそれを置くことについての
import operator
next = operator.methodcaller("next")
ネッドの提案Python 3では、イテレータでない場合にnext()
を呼び出すとTypeError
が呼び出されますが、このバージョンではAttributeError
が発生します。
編集:決して気にしないでください。 stevehaが指摘するように、operator.methodcaller()
は2.6で導入されましたが、これは残念です。
- 1. Python 2.6のElementTree.iter()の代わりに
- 2. Python 2.6 bisect_rightインデックス(index + 1)の代わりにインデックスを返す
- 3. FORループの代わりに
- 4. Thread.Suspend()メソッドの代わりに
- 5. Pythonのクラスのコールスーパーのメソッドの代わりに、
- 6. PythonのGotoキーワードの代わりに
- 7. python:匿名関数の代わりに
- 8. forループの代わりにpalindrome- whileループ
- 9. Sunspot for Railsの代わりに
- 10. HEADの代わりにGit push:refs/for/master
- 11. ラプルforループの代わりに
- 12. BtsMSITask for BizTalkの代わりに
- 13. Python 2.7以前のディクテーションの代わりに
- 14. /users /:の代わりにルートルート/名前
- 15. 代わりにJavery Mobile for Cordovaプロジェクト
- 16. odbc_resultメソッドの代わりにmysqli
- 17. 入れ子のメソッドの代わりに、
- 18. 代わりにlog4jのPriority.DEBUGのメソッド
- 19. Pythonのより多くのdefメソッドを作るdefメソッドを作ることができます
- 20. python generator for..in vs next()
- 21. UAPushメソッドの代わりにappReceivedRemoteNotification?
- 22. MVCページング:Getメソッドの代わりにポストメソッド
- 23. AngularJsサービスの代わりにAsp.net WebApiメソッド
- 24. 要素の代わりにループ印刷のためのPython for Pythonリスト
- 25. アドレスの代わりにGethの名前
- 26. pythonに2.7の代わりに2.7の代わりにインストールされたモジュール
- 27. インナーは、名前の代わりにID
- 28. gotoコマンドの代わりにpython?
- 29. 再帰の代わりに - Python
- 30. Python forループは、文字列出力の代わりにNaNを返します。
@pantsgolemは、Python 3では、iterator以外で呼び出したときに 'next()'が 'TypeError'を呼び出すと指摘しました。私はこの回答を編集して 'AttributeError'を捕まえ、' TypeError'としてそれを再現しました。 (私はこれが良いStackOverflowエチケットであることを願っています;これは私が他人の答えを編集した初めてのことです!) – steveha
さらに重要なことに、2.6のnext()はその場合にTypeErrorを発生させます。それを修正することはできますが、それを含めるように編集することは私にはうまくいきます。 –